home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1997 #3 / Amiga Plus CD - 1997 - No. 03.iso / pd / programmierung / alienbreed3d2_src / cheesesauce / 4000test.s < prev    next >
Text File  |  1997-01-31  |  150KB  |  10,466 lines

  1.  
  2. *************************************************
  3. * Stuff to do to get a C2P version:
  4. * Change copperlist
  5. * Change wall drawing
  6. * change floor drawing
  7. * change object drawing
  8. * change polygon drawing (ugh)
  9. * Write a palette generator program in AMOS
  10. * to provide a good 256 colour palette and
  11. * convert all graphics files specified
  12. * (possibly included in the game linker
  13. * program).
  14. * Possibly change the wall/floor/object
  15. * palettes to look nicer with more shades.
  16. * RE-implement stippling (if not present)
  17. * as it will look gorgeous now.
  18. *************************************************
  19.  
  20.  
  21. _break    macro
  22. ;    bkpt    \1
  23.     endm
  24.  
  25.  
  26. FILTER    macro
  27. ;    move.l    d0,-(sp)
  28. ;    move.l    #65000,d0
  29. ;.loop\@
  30. ;    bchg    #1,$bfe001
  31. ;    dbra    d0,.loop\@
  32. ;    move.l    (sp)+,d0
  33.     endm
  34.  
  35. BLACK    macro
  36.     move.w    #0,$dff180
  37.     endm
  38.  
  39. RED    macro
  40.     move.w    #$f00,$dff180
  41.     endm
  42.  
  43. FLASHER macro
  44. ;    movem.l    d1,-(sp)
  45. ;    move.w    #-1,d1
  46. ;
  47. ;loop3\@
  48. ;;    move.w    #\1,$dff180
  49. ;    nop
  50. ;    nop
  51. ;    move.w    #\2,$dff180
  52. ;    nop
  53. ;    nop
  54. ;    dbra    d1,loop3\@
  55.  
  56. ;    movem.l    (sp)+,d1
  57.  
  58.     endm
  59.  
  60. GREEN    macro
  61.     move.w    #$0f0,$dff180
  62.     endm
  63.  
  64. BLUE    macro
  65.     move.w    #$f,$dff180
  66.     endm
  67.  
  68. DataCacheOff macro
  69.     movem.l    a0-a6/d0-d7,-(sp)
  70.     move.l    4.w,a6
  71.     moveq    #0,d0
  72.     move.l    #%0000000100000000,d1
  73.     jsr    _LVOCacheControl(a6)
  74.     movem.l    (sp)+,a0-a6/d0-d7
  75.     endm
  76.  
  77. DataCacheOn macro
  78.     movem.l    a0-a6/d0-d7,-(sp)
  79.     move.l    4.w,a6
  80.     moveq    #-1,d0
  81.     move.l    #%0000000100000000,d1
  82.     jsr    _LVOCacheControl(a6)
  83.     movem.l    (sp)+,a0-a6/d0-d7
  84.     endm
  85.  
  86.     opt    P=68020
  87.  
  88.     include utils:sysinc/hardware/intbits.i
  89.  
  90. CD32VER equ 0
  91.  
  92. maxscrdiv EQU 8
  93. max3ddiv EQU 5
  94. playerheight EQU 12*1024
  95. playercrouched EQU 8*1024
  96. scrheight EQU 80
  97.  
  98. ; k/j/m
  99.  
  100. ; 4/8
  101. ; s/x
  102. ; b/n
  103.  
  104. midoffset EQU 104*4*40
  105.  
  106.  
  107.  SECTION Scrn,CODE
  108. OpenLib       equ -552
  109. CloseLib      equ -414
  110.  
  111. INTREQ        equ    $09C
  112. INTENA        equ    $09A
  113. INTENAR    equ    $01C
  114. DMACON        equ    $096
  115.  
  116. SERPER        equ    $032
  117. SERDATR    equ    $018
  118. SERDAT        equ    $030
  119. vhposr        equ $006    
  120. vhposrl    equ $007 
  121.  
  122. bltcon0    equ $40 
  123. bltcon1    equ $42
  124. bltcpt        equ $48
  125. bltbpt        equ $4c
  126. bltapt        equ $50
  127. spr0ctl    equ $142
  128. spr1ctl    equ $14a
  129. spr2ctl    equ $152
  130. spr3ctl    equ $15a
  131. spr4ctl    equ $162
  132. spr5ctl    equ $16a
  133. spr6ctl    equ $172
  134. spr7ctl    equ $17a
  135. spr0pos    equ $140
  136. spr1pos    equ $148
  137. spr2pos    equ $150
  138. spr3pos    equ $158
  139. spr4pos    equ $160
  140. spr5pos    equ $168
  141. spr6pos    equ $170
  142. spr7pos    equ $178
  143. bltdpt         equ $54
  144. bltafwm    equ $44
  145. bltalwm    equ $46
  146. bltsize         equ $58
  147. bltcmod         equ $60
  148. bltbmod         equ $62
  149. bltamod         equ $64
  150. bltdmod         equ $66
  151. diwstart        equ $8e         ; Screen hardware registers.
  152. diwstop         equ $90
  153. ddfstart        equ $92
  154. ddfstop         equ $94
  155. bplcon0         equ $100
  156. bplcon1         equ $102
  157. col0            equ $180
  158. col1            equ $182
  159. col2        equ $184
  160. col3        equ $186
  161. col4        equ $188
  162. col5        equ $18a
  163. col6        equ $18c
  164. col7        equ $18e
  165. col8            equ $190
  166. col9            equ $192
  167. col10           equ $194
  168. col11           equ $196
  169. col12           equ $198
  170. col13           equ $19a
  171. dmacon        equ $96
  172. dmaconr        equ $002
  173. intenar        equ $01c
  174. intena        equ $09a
  175. intreq        equ $09c
  176. intreqr        equ $01e
  177. intreqrl    equ $01f
  178. bpl1pth         equ $e0
  179. bpl1ptl         equ $e2
  180. bpl2pth        equ $e4
  181. bpl2ptl        equ $e6
  182. bpl3pth        equ $e8
  183. bpl3ptl        equ $ea
  184. bpl4pth        equ $ec
  185. bpl4ptl        equ $ee
  186. bpl5pth        equ $f0
  187. bpl5ptl        equ $f2
  188. bpl6pth        equ $f4
  189. bpl6ptl        equ $f6
  190. bpl7pth        equ $f8
  191. bpl7ptl        equ $fa
  192. bpl8pth        equ $fc
  193. bpl8ptl        equ $fe
  194. spr0pth        equ $120
  195. spr0ptl        equ $122
  196. spr1pth        equ $124
  197. spr1ptl        equ $126
  198. spr2pth        equ $128
  199. spr2ptl        equ $12a
  200. spr3pth        equ $12c
  201. spr3ptl        equ $12e
  202. spr4pth        equ $130
  203. spr4ptl        equ $132
  204. spr5pth        equ $134
  205. spr5ptl        equ $136
  206. spr6pth        equ $138
  207. spr6ptl        equ $13a
  208. spr7pth        equ $13c
  209. spr7ptl        equ $13e
  210. adkcon        equ   $09E
  211.  
  212.  
  213. ; move.l #length,d0
  214. ; moveq.l #2,d1    ; chipmem
  215. ; move.l 4.w,a6
  216. ; jsr allocmem(a6) = -198
  217.  
  218. ; tst.l d0
  219. ; beq.s ohbugger
  220. ; move.l d0,memaddr
  221.  
  222.  
  223. ; move.l 4.w,a6
  224. ; move.l memaddr,a1
  225. ; move.l #size,d0
  226. ; jsr freemem(a6) =-210
  227.  
  228.  
  229. ** This waits for the blitter to finish before allowing program
  230. ** execution to continue.
  231.  
  232.  
  233.  include "ab3:source_4000/protsetupdecode"
  234.  
  235. SAVEREGS MACRO
  236.  movem.l d0-d7/a0-a6,-(a7)
  237.  ENDM
  238.  
  239. GETREGS MACRO
  240.  movem.l (a7)+,d0-d7/a0-a6
  241.  ENDM
  242.  
  243.  
  244. WB MACRO
  245. \@bf:
  246.  btst #6,dmaconr(a6)
  247.  bne.s \@bf
  248.  ENDM
  249.  
  250. WBa MACRO
  251. \@bf:
  252.  move.w #\2,$dff180
  253.  
  254.  btst #6,$bfe001
  255.  bne.s \@bf
  256. \@bz:
  257.  
  258.  move.w #$f0f,$dff180
  259.  
  260.  btst #6,$bfe001
  261.  beq.s \@bz
  262.  
  263.  ENDM
  264.  
  265. *Another version for when a6 <> dff000
  266.  
  267. WBSLOW MACRO
  268. \@bf:
  269.  btst #6,$dff000+dmaconr
  270.  bne.s \@bf
  271.  ENDM
  272.  
  273. WT MACRO
  274. \@bf:
  275.  btst #6,(a3)
  276.  bne.s \@bd
  277.  rts
  278. \@bd: 
  279.  btst #4,(a0)
  280.  beq.s \@bf
  281.  ENDM
  282.  
  283. WTNOT MACRO
  284. \@bf:
  285.  btst #6,(a3)
  286.  bne.s \@bd
  287.  rts
  288. \@bd: 
  289.  btst #4,(a0)
  290.  bne.s \@bf
  291.  ENDM
  292.  
  293. **
  294.  
  295.  include "ab3:source_4000/ProtectionProtection"
  296.  include "macros.i"
  297.  include "ab3:source_4000/defs.i"
  298.  
  299.  move.w (a0)+,mors
  300.  
  301. ;    FLASHER $0f0,$fff
  302.  
  303. ; PROTFCALC
  304. ; PROTGCALC
  305. ; PROTHCALC
  306. ; PROTICALC
  307. ; PROTKCALC
  308. ; PROTLCALC
  309. ; PROTMCALC
  310.  
  311.  
  312.  
  313.  move.l #$dff000,a6    ; NB V. IMPORTANT: A6=CUSTOM BASE
  314.  move.w intenar(a6),_storeint
  315.  and.w #$c000,_storeint
  316.  
  317.  move.w #13,SERPER(a6)    ;19200 baud, 8 bits, no parity
  318.  
  319.  
  320.  st GOURSEL
  321.  
  322.  move.l 4.w,a6
  323.  lea VBLANKInt(pc),a1
  324.  moveq #INTB_COPER,d0
  325.  jsr _LVOAddIntServer(a6)
  326.  
  327.     IFEQ CD32VER
  328.  move.l 4.w,a6
  329.  lea KEYInt(pc),a1
  330.  moveq #INTB_PORTS,d0
  331.  jsr _LVOAddIntServer(a6)
  332.     ENDC
  333.     
  334.  move.l 4.w,a6
  335.  jsr _LVOSuperState(a6)
  336.  move.l d0,SSTACK
  337.  
  338.  DataCacheOff
  339. ; DATA_CACHE_OFF d2
  340.  
  341.  move.l 4.w,a6
  342.  move.l SSTACK,d0
  343.  jsr _LVOUserState(a6)
  344.  
  345.  
  346.  IFNE CD32VER
  347.  clr.b PLR1KEYS
  348.  clr.b PLR1PATH
  349.  clr.b PLR1MOUSE
  350.  st PLR1JOY
  351.  clr.b PLR2KEYS
  352.  clr.b PLR2PATH
  353.  clr.b PLR2MOUSE
  354.  st PLR2JOY
  355.  ELSE
  356.  st PLR1KEYS
  357.  clr.b PLR1PATH
  358.  clr.b PLR1MOUSE
  359.  clr.b PLR1JOY
  360.  st PLR2KEYS
  361.  clr.b PLR2PATH
  362.  clr.b PLR2MOUSE
  363.  clr.b PLR2JOY
  364.  ENDC
  365.  
  366.  PRSDO
  367.  
  368.  move.l #2,d1    
  369.  move.l #10240*2,d0
  370.  move.l 4.w,a6
  371.  jsr -198(a6)
  372.  move.l d0,TEXTSCRN
  373.  move.w d0,TSPTl
  374.  swap d0
  375.  move.w d0,TSPTh
  376.  
  377.  move.l #nullspr,d0
  378.  move.w d0,txs0l
  379.  move.w d0,txs1l
  380.  move.w d0,txs2l
  381.  move.w d0,txs3l
  382.  move.w d0,txs4l
  383.  move.w d0,txs5l
  384.  move.w d0,txs6l
  385.  move.w d0,txs7l
  386.  swap d0
  387.  move.w d0,txs0h
  388.  move.w d0,txs1h
  389.  move.w d0,txs2h
  390.  move.w d0,txs3h
  391.  move.w d0,txs4h
  392.  move.w d0,txs5h
  393.  move.w d0,txs6h
  394.  move.w d0,txs7h 
  395.  
  396.  move.l #1,d1    
  397.  move.l #120000,d0
  398.  move.l 4.w,a6
  399.  jsr -198(a6)
  400.  move.l d0,LEVELDATA
  401.  
  402.  
  403.  jsr START
  404.  
  405.  rts
  406.  
  407. _storeint
  408.     dc.w 0
  409.  
  410. * Load level into buffers.
  411.  clr.b doanything
  412.  clr.b dosounds
  413.  
  414. ; DRAW TEXT SCREEN
  415.  
  416. TWEENTEXT:
  417.  
  418.  move.l #LEVELTEXT,a0
  419.  move.w PLOPT,d0
  420.  muls #82*16,d0
  421.  add.l d0,a0
  422.  
  423.  move.w #14,d7
  424.  move.w #0,d0
  425. DOWNTEXT:
  426.  move.l TEXTSCRN,a1
  427.  jsr DRAWLINEOFTEXT
  428.  addq #1,d0
  429.  add.w #82,a0
  430.  dbra d7,DOWNTEXT
  431.  rts
  432.  
  433. FONTADDRS:
  434.  dc.l ENDFONT0,CHARWIDTHS0
  435.  dc.l ENDFONT1,CHARWIDTHS1
  436.  dc.l ENDFONT2,CHARWIDTHS2
  437.  
  438. ENDFONT0:
  439.  incbin "endfont0"
  440. CHARWIDTHS0:
  441.  incbin "charwidths0"
  442. ENDFONT1:
  443.  incbin "endfont1"
  444. CHARWIDTHS1:
  445.  incbin "charwidths1"
  446. ENDFONT2:
  447.  incbin "endfont2"
  448. CHARWIDTHS2:
  449.  incbin "charwidths2"
  450.  
  451.  even
  452.  
  453. DRAWLINEOFTEXT:
  454.  movem.l d0/a0/d7,-(a7)
  455.  
  456.  muls #80*16,d0
  457.  add.l d0,a1    ; screen pointer
  458.  
  459.  move.l #FONTADDRS,a3
  460.  moveq #0,d0
  461.  move.b (a0)+,d0
  462.  move.l (a3,d0.w*8),a2
  463.  move.l 4(a3,d0.w*8),a3
  464.  
  465.  moveq #0,d1    ; width counter:
  466.  move.w #79,d6
  467.  tst.b (a0)+
  468.  beq.s NOTCENTRED
  469.  moveq #-1,d5
  470.  move.l a0,a4
  471.  moveq #0,d2
  472.  moveq #0,d3
  473.  move.w #79,d0    ; number of chars
  474. .addup:
  475.  addq #1,d5
  476.  move.b (a4)+,d2
  477.  move.b -32(a3,d2.w),d4
  478.  add.w d4,d3
  479.  cmp.b #32,d2
  480.  beq.s .DONTPUTIN
  481.  move.w d5,d6
  482.  move.w d3,d1
  483. .DONTPUTIN:
  484.  dbra d0,.addup
  485.  asr.w #1,d1
  486.  neg.w d1
  487.  add.w #320,d1    ; horiz pos of start x
  488.  
  489. NOTCENTRED:
  490.  move.w d6,d7
  491. DOACHAR:
  492.  moveq #0,d2
  493.  move.b (a0)+,d2
  494.  sub.w #32,d2
  495.  moveq #0,d6
  496.  move.b (a3,d2.w),d6
  497.  asl.w #5,d2
  498.  lea (a2,d2.w),a4    ; char font
  499. val SET 0
  500.  REPT 16
  501.  move.w (a4)+,d0
  502.  bfins d0,val(a1){d1:d6}
  503. val SET val+80
  504.  ENDR
  505.  add.w d6,d1
  506.  dbra d7,DOACHAR
  507.  movem.l (a7)+,d0/a0/d7
  508.  rts 
  509.  
  510.  
  511. CLRTWEENSCRN:
  512.  move.l TEXTSCRN,a0
  513.  move.w #(10240/16)-1,d0
  514.  move.l #$0,d1
  515. .lll
  516.  move.l d1,(a0)+
  517.  move.l d1,(a0)+
  518.  move.l d1,(a0)+
  519.  move.l d1,(a0)+
  520.  move.l d1,(a0)+
  521.  move.l d1,(a0)+
  522.  move.l d1,(a0)+
  523.  move.l d1,(a0)+
  524.  dbra d0,.lll
  525.  rts
  526.  
  527. PLAYTHEGAME:
  528.  
  529.  move.w #0,TXTCOLL
  530.  
  531.  bsr CLRTWEENSCRN
  532.  
  533.  cmp.b #'n',mors
  534.  bne.s .notext
  535.  bsr TWEENTEXT
  536. .notext
  537.  
  538. ;charlie 
  539.  move.l #TEXTCOP,$dff080
  540.  
  541.  move.w #$10,d0
  542.  move.w #7,d1
  543.  
  544. .fdup
  545.  move.w d0,TXTCOLL
  546.  add.w #$121,d0
  547. .wtframe:
  548.  btst #5,$dff000+intreqrl
  549.  beq.s .wtframe
  550.  move.w #$0020,$dff000+intreq
  551.  dbra d1,.fdup
  552.  
  553.  jsr INITCOPPERSCRN
  554.  
  555. ; Get level memory.
  556.  
  557.  move.l #1,d1
  558.  move.l #50000,d0
  559.  move.l 4.w,a6
  560.  jsr -198(a6)
  561.  move.l d0,LEVELGRAPHICS
  562.  
  563.  move.l #1,d1
  564.  move.l #40000,d0
  565.  move.l 4.w,a6
  566.  jsr -198(a6)
  567.  move.l d0,LEVELCLIPS
  568.  
  569.  move.l #$dff000,a6
  570.  jsr SETPLAYERS
  571.  
  572. ; move.l #LEVELDATAD,LEVELDATA
  573. ; move.l #LEVELGRAPHICSD,LEVELGRAPHICS
  574. ; move.l #LEVELCLIPSD,LEVELCLIPS
  575.  
  576. ; bra noload
  577.  
  578.  move.l doslib,a6
  579.  move.l #LDname,d1
  580.  move.l #1005,d2
  581.  jsr -30(a6)
  582.  move.l d0,LDhandle
  583.  
  584.  move.l doslib,a6
  585.  move.l d0,d1
  586.  move.l LEVELCLIPS,d2
  587.  move.l #40000,d3
  588.  jsr -42(a6)
  589.  
  590.  move.l doslib,a6
  591.  move.l LDhandle,d1
  592.  jsr -36(a6)
  593.  
  594. *************************************
  595.     move.l    LEVELCLIPS,d0
  596.     moveq    #0,d1
  597.     move.l LEVELDATA,a0
  598.     lea    WorkSpace,a1
  599.     lea    $0,a2
  600.     jsr    unLHA
  601. *************************************
  602.  
  603. ********
  604.  
  605.  move.l doslib,a6
  606.  move.l #LGname,d1
  607.  move.l #1005,d2
  608.  jsr -30(a6)
  609.  move.l d0,LGhandle
  610.  
  611.  move.l doslib,a6
  612.  move.l d0,d1
  613.  move.l LEVELCLIPS,d2
  614.  move.l #40000,d3
  615.  jsr -42(a6)
  616.  
  617.  move.l doslib,a6
  618.  move.l LGhandle,d1
  619.  jsr -36(a6)
  620.  
  621. *************************************
  622.     move.l    LEVELCLIPS,d0
  623.     moveq    #0,d1
  624.     move.l LEVELGRAPHICS,a0
  625.     lea    WorkSpace,a1
  626.     lea    $0,a2
  627.     jsr    unLHA
  628. *************************************
  629.  
  630.  
  631. ********
  632.  
  633.  move.l doslib,a6
  634.  move.l #LCname,d1
  635.  move.l #1005,d2
  636.  jsr -30(a6)
  637.  move.l d0,LChandle
  638.  
  639.  move.l doslib,a6
  640.  move.l d0,d1
  641.  move.l #WorkSpace+16384,d2
  642.  move.l #16000,d3
  643.  jsr -42(a6)
  644.  
  645.  move.l doslib,a6
  646.  move.l LChandle,d1
  647.  jsr -36(a6)
  648.  
  649. *************************************
  650.     move.l    #WorkSpace+16384,d0
  651.     moveq    #0,d1
  652.     move.l LEVELCLIPS,a0
  653.     lea    WorkSpace,a1
  654.     lea    $0,a2
  655.     jsr    unLHA
  656. *************************************
  657.  
  658.  
  659. *******
  660.  
  661. noload:
  662.  
  663. ********
  664.  
  665. ; move.l doslib,a6
  666. ; move.l #Prefsname,d1
  667. ; move.l #1005,d2
  668. ; jsr -30(a6)
  669. ; move.l d0,Prefshandle
  670.  
  671. ; move.l doslib,a6
  672. ; move.l d0,d1
  673. ; move.l #Prefsfile,d2
  674. ; move.l #50,d3
  675. ; jsr -42(a6)
  676.  
  677. ; move.l doslib,a6
  678. ; move.l Prefshandle,d1
  679. ; jsr -36(a6)
  680.  
  681. *******
  682.  
  683.  IFNE CD32VER
  684.  move.l doslib,a6
  685.  move.l #115,d1
  686.  jsr -198(a6)
  687.  ENDC
  688.  
  689.  
  690. ; move.l doslib,d0
  691. ; move.l d0,a1
  692. ; move.l 4.w,a6
  693. ; jsr CloseLib(a6)
  694.  
  695.  move.l #$dff000,a6
  696.  
  697. charlie:
  698. ; jmp  ENDGAMESCROLL
  699.  
  700.     move.w #$87c0,dmacon(a6)
  701.  
  702.     move.w    #%1000000000100000,dmacon(a6)
  703.  
  704. ; move.w intenar(a6),saveinters
  705.     
  706.     move.w #%00101111,intena(a6)
  707.  
  708.     move.w #255,adkcon(a6)
  709.  
  710.  
  711. *** Put myself in supervisor mode
  712.  
  713.  bra blag
  714. ; move.l $6c,d0
  715. ; move.l #blag,$6c
  716. ; move.w #$8010,intreq(a6)
  717.  
  718.  rts
  719.  
  720. saveit: ds.l 10
  721. doslibname: dc.b 'dos.library',0
  722.  even
  723. doslib: dc.l 0
  724.  
  725. mors: dc.w 0
  726.  
  727. LDname: dc.b 'ab3d2:levels/level_'
  728. LEVA:
  729.  dc.b 'a/twolev.bin',0
  730.  even
  731. LDhandle: dc.l 0
  732. LGname: dc.b 'ab3d2:levels/level_'
  733. LEVB:
  734.  dc.b 'a/twolev.graph.bin',0
  735.  even
  736. LGhandle: dc.l 0
  737. LCname: dc.b 'ab3d2:levels/level_'
  738. LEVC:
  739.  dc.b 'a/twolev.clips',0
  740.  even
  741. LChandle: dc.l 0
  742.  
  743.     cnop    0,4
  744.  
  745. Prefsname: dc.b 'ram:prefs',0
  746.  even
  747. Prefshandle: dc.l 0
  748.  
  749. Prefsfile:
  750.  dc.b 'k4nx'
  751.  ds.b 50
  752.  
  753.  even
  754.  
  755.  cnop 0,4
  756.  
  757. VBLANKInt
  758.  dc.l 0,0
  759.  dc.b NT_INTERRUPT,9
  760.  dc.l Prefsname
  761.  dc.l 0
  762.  dc.l Chan0inter
  763.  
  764.  
  765. KEYInt
  766.  dc.l 0,0
  767.  dc.b NT_INTERRUPT,127
  768.  dc.l Prefsname
  769.  dc.l 0
  770.  dc.l key_interrupt
  771.  
  772.  
  773. blag:
  774. ; move.w #$10,intreq(a6)
  775. ; move.l d0,$6c
  776. ; move.w #$7fff,intena(a6)
  777.  
  778. ; move.w #$20,$dff1dc
  779.  
  780. ; move.l 4.w,a6
  781. ; lea VBLANKInt(pc),a1
  782. ; moveq #INTB_COPER,d0
  783. ; jsr _LVOAddIntServer(a6)
  784.  
  785. ****************************
  786. * Initialize level
  787. ****************************
  788. * Poke all clip offsets into
  789. * correct bit of level data.
  790. ****************************
  791.  move.l LEVELGRAPHICS,a0
  792.  move.l 12(a0),a1
  793.  add.l a0,a1
  794.  move.l a1,ZoneGraphAdds
  795.  move.l (a0),a1
  796.  add.l a0,a1
  797.  move.l a1,DoorData
  798.  move.l 4(a0),a1
  799.  add.l a0,a1
  800.  move.l a1,LiftData
  801.  move.l 8(a0),a1
  802.  add.l a0,a1
  803.  move.l a1,SwitchData
  804.  adda.w #16,a0
  805.  move.l a0,ZoneAdds
  806.  
  807.  move.l LEVELDATA,a1
  808.  move.l 16+6(a1),a2
  809.  add.l a1,a2
  810.  move.l a2,Points
  811.  move.w 8+6(a1),d0
  812.  lea 4(a2,d0.w*4),a2
  813.  move.l a2,PointBrights
  814.  
  815.  move.l 20+6(a1),a2
  816.  add.l a1,a2
  817.  move.l a2,FloorLines
  818.  move.l 24+6(a1),a2
  819.  add.l a1,a2
  820.  move.l a2,ObjectData
  821. *****************************************
  822. * Just for charles
  823.  
  824. ; move.w #$6060,6(a2)
  825. ; move.l #$d0000,8(a2)
  826. ; sub.w #40,4(a2)
  827. ; move.w #45*256+45,14(a2)
  828. ****************************************
  829.  move.l 28+6(a1),a2
  830.  add.l a1,a2
  831.  move.l a2,PlayerShotData
  832.  move.l 32+6(a1),a2
  833.  add.l a1,a2
  834.  move.l a2,NastyShotData
  835.  
  836.  add.l #64*20,a2
  837.  move.l a2,OtherNastyData
  838.  
  839.  move.l 36+6(a1),a2
  840.  add.l a1,a2
  841.  move.l a2,ObjectPoints  
  842.  move.l 40+6(a1),a2
  843.  add.l a1,a2
  844.  move.l a2,PLR1_Obj
  845.  move.l 44+6(a1),a2
  846.  add.l a1,a2
  847.  move.l a2,PLR2_Obj
  848.  move.w 14+6(a1),NumObjectPoints
  849.  
  850. ; bra noclips
  851.   
  852.  move.l LEVELCLIPS,a2
  853.  moveq #0,d0
  854.  move.w 10+6(a1),d7    ;numzones
  855. assignclips:
  856.  move.l (a0)+,a3
  857.  add.l a1,a3    ; pointer to a zone
  858.  adda.w #ToListOfGraph,a3 ; pointer to zonelist
  859. dowholezone:
  860.  tst.w (a3)
  861.  blt.s nomorethiszone
  862.  tst.w 2(a3)
  863.  blt.s thisonenull
  864.  
  865.  move.l d0,d1
  866.  asr.l #1,d1
  867.  move.w d1,2(a3)
  868.  
  869. findnextclip:
  870.  cmp.w #-2,(a2,d0.l)
  871.  beq.s foundnextclip
  872.  addq.l #2,d0
  873.  bra.s findnextclip
  874. foundnextclip
  875.  addq.l #2,d0
  876.  
  877. thisonenull:
  878.  addq #8,a3 
  879.  bra.s dowholezone
  880. nomorethiszone:
  881.  dbra d7,assignclips
  882.  
  883.  lea (a2,d0.l),a2
  884.  move.l a2,CONNECT_TABLE
  885.  
  886. noclips:
  887.  
  888. * Put in addresses of glowything
  889.  
  890.  
  891. ************************************
  892.  
  893. ; cmp.b #'k',Prefsfile
  894. ; bne.s nkb
  895.  
  896. ;nkb:
  897. ; cmp.b #'m',Prefsfile
  898. ; bne.s nmc
  899. ; clr.b PLR1KEYS
  900. ; clr.b PLR1PATH
  901. ; st PLR1MOUSE
  902. ; clr.b PLR1JOY
  903. ;nmc:
  904. ; cmp.b #'j',Prefsfile
  905. ; bne.s njc
  906. ; clr.b PLR1KEYS
  907. ; clr.b PLR1PATH
  908. ; clr.b PLR1MOUSE
  909. ; st PLR1JOY
  910. ;njc:
  911.  
  912.  clr.b PLR1_StoodInTop
  913.  move.l #playerheight,PLR1s_height
  914.  
  915.  move.l #empty,pos1LEFT
  916.  move.l #empty,pos2LEFT
  917.  move.l #empty,pos1RIGHT
  918.  move.l #empty,pos2RIGHT
  919.  move.l #emptyend,Samp0endLEFT
  920.  move.l #emptyend,Samp1endLEFT
  921.  move.l #emptyend,Samp0endRIGHT
  922.  move.l #emptyend,Samp1endRIGHT
  923.  
  924.  move.l #nullspr,d0
  925.  move.w d0,s4l
  926.  move.w d0,s5l
  927.  move.w d0,s6l
  928.  move.w d0,s7l
  929.  swap d0
  930.  move.w d0,s4h
  931.  move.w d0,s5h
  932.  move.w d0,s6h
  933.  move.w d0,s7h 
  934.  
  935.  move.l #nullline,d0
  936.  move.w d0,n1l
  937.  swap d0
  938.  move.w d0,n1h
  939.  
  940.  move.l Panel,d0
  941.  move.w d0,p1l
  942.  swap d0
  943.  move.w d0,p1h
  944.  swap d0
  945.  add.l #40,d0
  946.  move.w d0,p2l
  947.  swap d0
  948.  move.w d0,p2h
  949.  swap d0
  950.  add.l #40,d0
  951.  move.w d0,p3l
  952.  swap d0
  953.  move.w d0,p3h
  954.  swap d0
  955.  add.l #40,d0
  956.  move.w d0,p4l
  957.  swap d0
  958.  move.w d0,p4h
  959.  swap d0
  960.  add.l #40,d0
  961.  move.w d0,p5l
  962.  swap d0
  963.  move.w d0,p5h
  964.  swap d0
  965.  add.l #40,d0
  966.  move.w d0,p6l
  967.  swap d0
  968.  move.w d0,p6h
  969.  swap d0
  970.  add.l #40,d0
  971.  move.w d0,p7l
  972.  swap d0
  973.  move.w d0,p7h
  974.  swap d0
  975.  add.l #40,d0
  976.  move.w d0,p8l
  977.  swap d0
  978.  move.w d0,p8h
  979.  
  980. *******************************
  981. * TIMER SCREEN SETUP
  982. ; move.l #TimerScr,d0
  983. ; move.w d0,p1l
  984. ; swap d0
  985. ; move.w d0,p1h
  986. ; move.w #$1201,Panelcon
  987.  
  988.  move.l #borders,d0
  989.  move.w d0,s0l
  990.  swap d0
  991.  move.w d0,s0h
  992.  move.l #borders+2592,d0
  993.  move.w d0,s1l
  994.  swap d0
  995.  move.w d0,s1h
  996.  move.l #borders+2592*2,d0
  997.  move.w d0,s2l
  998.  swap d0
  999.  move.w d0,s2h
  1000.  move.l #borders+2592*3,d0
  1001.  move.w d0,s3l
  1002.  swap d0
  1003.  move.w d0,s3h
  1004.  
  1005.  move.w #52*256+64,borders
  1006.  move.w #212*256+0,borders+8
  1007.  move.w #52*256+64,borders+2592
  1008.  move.w #212*256+128,borders+8+2592
  1009.  move.w #52*256+192,borders+2592*2
  1010.  move.w #212*256+0,borders+8+2592*2
  1011.  move.w #52*256+192,borders+2592*3
  1012.  move.w #212*256+128,borders+8+2592*3
  1013.  
  1014.  move.l #FacePlace,d0
  1015.  move.w d0,f1l
  1016.  swap d0
  1017.  move.w d0,f1h
  1018.  move.l #FacePlace+32*24,d0
  1019.  move.w d0,f2l
  1020.  swap d0
  1021.  move.w d0,f2h
  1022.  move.l #FacePlace+32*24*2,d0
  1023.  move.w d0,f3l
  1024.  swap d0
  1025.  move.w d0,f3h
  1026.  move.l #FacePlace+32*24*3,d0
  1027.  move.w d0,f4l
  1028.  swap d0
  1029.  move.w d0,f4h
  1030.  move.l #FacePlace+32*24*4,d0
  1031.  move.w d0,f5l
  1032.  swap d0
  1033.  move.w d0,f5h
  1034.   
  1035.  
  1036.  move.l #bigfield,d0
  1037.  move.w d0,ocl
  1038.  swap d0
  1039.  move.w d0,och
  1040.  
  1041.  bset.b #1,$bfe001
  1042.  
  1043. ; jmp stuff
  1044. ;endstuff:
  1045.  
  1046.  move.w #$00ff,$dff09e
  1047.  
  1048. ; move.l #Blurbfield,$dff080
  1049.  
  1050.  move.w #0,d0
  1051.  
  1052.  move.l #scrn,d0
  1053.  move.w d0,pl1l
  1054.  swap d0
  1055.  move.w d0,pl1h
  1056.  
  1057.  move.l #scrn+40,d0
  1058.  move.w d0,pl2l
  1059.  swap d0
  1060.  move.w d0,pl2h
  1061.  
  1062.  move.l #scrn+80,d0
  1063.  move.w d0,pl3l
  1064.  swap d0
  1065.  move.w d0,pl3h
  1066.  
  1067.  move.l #scrn+120,d0
  1068.  move.w d0,pl4l
  1069.  swap d0
  1070.  move.w d0,pl4h
  1071.  
  1072.  move.l #scrn+160,d0
  1073.  move.w d0,pl5l
  1074.  swap d0
  1075.  move.w d0,pl5h
  1076.  
  1077.  move.l #scrn+200,d0
  1078.  move.w d0,pl6l
  1079.  swap d0
  1080.  move.w d0,pl6h
  1081.  
  1082.  move.l #scrn+240,d0
  1083.  move.w d0,pl7l
  1084.  swap d0
  1085.  move.w d0,pl7h
  1086.  
  1087.  
  1088. ****************************
  1089.  jsr INITPLAYER
  1090. ; bsr initobjpos
  1091. ****************************
  1092.  
  1093.  
  1094.  move.l #$dff000,a6
  1095.  
  1096.  move.l #null,$dff0a0
  1097.  move.w #100,$dff0a4
  1098.  move.w #443,$dff0a6
  1099.  move.w #63,$dff0a8
  1100.  
  1101.  move.l #null2,$dff0b0
  1102.  move.w #100,$dff0b4
  1103.  move.w #443,$dff0b6
  1104.  move.w #63,$dff0b8
  1105.  
  1106.  move.l #null4,$dff0c0
  1107.  move.w #100,$dff0c4
  1108.  move.w #443,$dff0c6
  1109.  move.w #63,$dff0c8
  1110.  
  1111.  move.l #null3,$dff0d0
  1112.  move.w #100,$dff0d4
  1113.  move.w #443,$dff0d6
  1114.  move.w #63,$dff0d8
  1115.  
  1116.  move.l #tab,a1
  1117.  move.w #64,d7
  1118.  move.w #0,d6
  1119. outerlop
  1120.  move.l #pretab,a0
  1121.  move.w #255,d5
  1122. scaledownlop:
  1123.  move.b (a0)+,d0
  1124.  ext.w d0
  1125.  ext.l d0
  1126.  muls d6,d0
  1127.  asr.l #6,d0
  1128.  move.b d0,(a1)+
  1129.  dbra d5,scaledownlop
  1130.  addq #1,d6
  1131.  dbra d7,outerlop
  1132.  
  1133.  move.l #$dff000,a6
  1134.  
  1135.  move.w #$c018,intena(a6)
  1136.  
  1137.  move.w #$f,dmacon(a6)
  1138.  move.w #$820f,dmacon(a6)
  1139.  
  1140. ; bsr protinit
  1141.  
  1142.  
  1143. ; move.w #$20,$1dc(a6)
  1144.  
  1145.  move.w #$0,$dff034
  1146.  move.w #0,Conditions
  1147.  
  1148.  cmp.b #'n',mors
  1149.  beq.s .nokeys
  1150.  move.w #%111111111111,Conditions
  1151. .nokeys:
  1152.  
  1153.  move.l #KeyMap,a5
  1154.  clr.b $45(a5)
  1155.  
  1156.  move.l #ingame,mt_data
  1157.  clr.b UseAllChannels
  1158.  
  1159. ; cmp.b #'b',Prefsfile+3
  1160. ; bne.s .noback
  1161. ; jsr mt_init
  1162. ;.noback:
  1163. ;
  1164. ; clr.b CHANNELDATA
  1165. ; clr.b CHANNELDATA+8
  1166. ; clr.b CHANNELDATA+16
  1167. ; clr.b CHANNELDATA+24
  1168. ;
  1169. ; cmp.b #'b',Prefsfile+3
  1170. ; bne.s noreserve
  1171. ;
  1172. ; st CHANNELDATA
  1173. ; st CHANNELDATA+8
  1174. ; st CHANNELDATA+16
  1175. ; st CHANNELDATA+24
  1176. ;noreserve: 
  1177.  
  1178. ; st CHANNELDATA
  1179. ; st CHANNELDATA+8
  1180.  
  1181.  move.l SampleList+6*8,pos0LEFT
  1182.  move.l SampleList+6*8+4,Samp0endLEFT
  1183.  move.l #playerheight,PLR1s_targheight
  1184.  move.l #playerheight,PLR1s_height
  1185.  move.l #playerheight,PLR2s_targheight
  1186.  move.l #playerheight,PLR2s_height
  1187.  
  1188. ; cmp.b #'n',mors
  1189. ; beq.s nohandshake
  1190. ;
  1191. ; move.b #%11011000,$bfd200
  1192. ; move.b #%00010000,$bfd000
  1193. ;waitloop:
  1194. ; btst.b #4,$bfd000
  1195. ; bne.s waitloop
  1196. ; move.b #%11000000,$bfd200
  1197.  
  1198. ;wtmouse:
  1199. ; btst #6,$bfe001
  1200. ; bne.s wtmouse
  1201.  
  1202. ;nohandshake:
  1203.  
  1204. ; jmp end
  1205.  
  1206.  move.l COPSCRN1,drawpt
  1207.  move.l COPSCRN2,olddrawpt
  1208.  
  1209.  jsr CLEARKEYBOARD
  1210.  jsr MAKEBACKROUT
  1211.  
  1212.  clr.b MASTERQUITTING
  1213.  
  1214.  cmp.b #'n',mors
  1215.  seq SLAVEQUITTING
  1216.  
  1217.  move.w #127,PLR2_energy
  1218.  
  1219. ; move.l #ANOTHERSUP,$80
  1220. ; trap #0
  1221. ; rts
  1222. ;
  1223. ;ANOTHERSUP:
  1224.  
  1225.  move.l $4.w,a6
  1226.  jsr _LVOSuperState(a6)
  1227.  move.l d0,SSTACK
  1228.  
  1229.  CACHE_FREEZE_OFF d2
  1230.  
  1231. ; charlie
  1232. ; DATA_CACHE_ON d2
  1233.  
  1234.  DataCacheOn
  1235.  
  1236.  move.l $4.w,a6
  1237.  move.l SSTACK,d0
  1238.  jsr _LVOUserState(a6)
  1239.  
  1240.  move.w #0,hitcol
  1241.  move.w #0,hitcol2
  1242.  
  1243.  cmp.b #'n',mors
  1244.  bne.s NOCLTXT
  1245.  
  1246.  move.b #0,lastpressed
  1247. .wtpress
  1248.  btst #6,$bfe001
  1249.  beq.s CLOSETXT
  1250.  btst #7,$bfe001
  1251.  beq.s CLOSETXT
  1252.  tst.b lastpressed
  1253.  beq.s .wtpress
  1254.  
  1255. CLOSETXT:
  1256.  
  1257.  move.w #$8f8,d0
  1258.  move.w #7,d1
  1259.  
  1260. .fdup
  1261.  move.w d0,TXTCOLL
  1262.  sub.w #$121,d0
  1263. .wtframe:
  1264.  btst #5,$dff000+intreqrl
  1265.  beq.s .wtframe
  1266.  move.w #$0020,$dff000+intreq
  1267.  dbra d1,.fdup
  1268.  
  1269.  move.w #0,TXTCOLL
  1270.  
  1271. NOCLTXT:
  1272.  
  1273.  
  1274.  
  1275.     move.l    4.w,a6
  1276.     jsr    _LVOForbid(a6)
  1277. ;    jsr    _LVODisable(a6)
  1278.  
  1279.  
  1280. ;    move.w    #%0111111111111111,intena+$dff000
  1281. ;    move.w    #%1000000011111111,intena+$dff000
  1282.  
  1283.  
  1284. ;charlie 
  1285.  move.l #bigfield,$dff080    ; Point the copper at our copperlist.
  1286.  
  1287.  
  1288.  clr.b PLR1_Ducked
  1289.  clr.b PLR2_Ducked
  1290.  clr.b p1_ducked
  1291.  clr.b p2_ducked
  1292.  
  1293. ********************************************
  1294.  
  1295. ;    jmp docredits
  1296.  
  1297. ********************************************
  1298.  
  1299.  
  1300.  st doanything
  1301.  st dosounds
  1302.  
  1303. lop:
  1304.  
  1305.  btst #6,$bfe001
  1306. ;charlie bne.b .nocop
  1307.  
  1308. ;charlie move.l #bigfield,$dff080    ; Point the copper at our copperlist.
  1309.  
  1310. .nocop
  1311.  
  1312.  cmp.b #'n',mors
  1313.  bne .nopause
  1314.  
  1315.  move.l #KeyMap,a5
  1316.  tst.b $19(a5)
  1317.  beq.s .nopause
  1318.  clr.b doanything
  1319.  
  1320. .waitrel:
  1321.  
  1322.  tst.b PLR1JOY
  1323.  beq.s .NOJOY
  1324.  jsr _ReadJoy1
  1325. .NOJOY
  1326.  
  1327.  tst.b $19(a5)
  1328.  bne.s .waitrel
  1329.  
  1330.  bsr PAUSEOPTS
  1331.  
  1332.  
  1333.  st doanything
  1334. .nopause: 
  1335.  
  1336.  st READCONTROLS
  1337.  move.l #$dff000,a6
  1338.  
  1339.  move.w hitcol,d0
  1340.  beq.s nofadedownhc
  1341.  sub.w #$100,d0
  1342.  move.w d0,hitcol
  1343.  move.w d0,hitcol2
  1344. nofadedownhc:
  1345.  
  1346.  cmp.b #'n',mors
  1347.  beq .nopause
  1348.  
  1349.  move.b SLAVEPAUSE,d0
  1350.  or.b MASTERPAUSE,d0
  1351.  beq.s .nopause
  1352.  clr.b doanything
  1353.  
  1354.  move.l #KeyMap,a5
  1355. .waitrel:
  1356.  
  1357.  
  1358.  cmp.b #'s',mors
  1359.  beq.s .RE2
  1360.  tst.b PLR1JOY
  1361.  beq.s .NOJOY
  1362.  jsr _ReadJoy1
  1363.  bra .RE1
  1364. .RE2:
  1365.  tst.b PLR2JOY
  1366.  beq.s .NOJOY
  1367.  jsr _ReadJoy2
  1368. .RE1
  1369. .NOJOY:
  1370.  tst.b $19(a5)
  1371.  bne.s .waitrel
  1372.  
  1373.  bsr PAUSEOPTS
  1374.  
  1375.  cmp.b #'m',mors
  1376.  bne.s .slavelast
  1377.  Jsr SENDFIRST
  1378.  bra .masfirst
  1379. .slavelast
  1380.  Jsr RECFIRST
  1381. .masfirst:
  1382.  clr.b SLAVEPAUSE
  1383.  clr.b MASTERPAUSE
  1384.  st doanything
  1385.  
  1386. .nopause: 
  1387.  
  1388.  
  1389.  
  1390.  move.l drawpt,d0
  1391.  move.l olddrawpt,drawpt
  1392.  move.l d0,olddrawpt
  1393.  move.l d0,$dff084    
  1394.  move.l drawpt,a3
  1395. ; move.l COPSCRNBUFF,a3
  1396.  adda.w #10,a3
  1397.  move.l a3,frompt
  1398.  add.l #104*4*40,a3
  1399.  move.l a3,midpt
  1400.  
  1401.  cmp.b #'s',mors
  1402.  beq.s nowaitslave
  1403.  
  1404. waitfortop:
  1405.  
  1406.  btst.b #0,intreqrl(a6)
  1407.  beq.b waitfortop
  1408.  
  1409.  move.w #$1,intreq(a6)
  1410.  move.l #PLR1_GunData,GunData
  1411.  move.b PLR1_GunSelected,GunSelected
  1412.  bra waitmaster
  1413.  
  1414. nowaitslave:
  1415.  move.l #PLR2_GunData,GunData
  1416.  move.b PLR2_GunSelected,GunSelected
  1417. waitmaster:
  1418.  
  1419.  
  1420.  move.l waterpt,a0
  1421.  move.l (a0)+,watertouse
  1422.  cmp.l #endwaterlist,a0
  1423.  blt.s okwat
  1424.  move.l #waterlist,a0
  1425. okwat:
  1426.  move.l a0,waterpt
  1427.  
  1428.  add.w #640,wtan
  1429.  and.w #8191,wtan
  1430.  add.w #1,wateroff
  1431.  and.w #63,wateroff
  1432.  
  1433.  move.l GunData,a6
  1434.  moveq #0,d0
  1435.  move.b GunSelected,d0
  1436.  lsl.w #2,d0
  1437.  lea (a6,d0.w*8),a6
  1438.  move.w (a6),d0
  1439.  asr.w #3,d0
  1440.  move.w d0,Ammo
  1441.  
  1442.  move.l PLR1_xoff,OLDX1
  1443.  move.l PLR1_zoff,OLDZ1
  1444.  move.l PLR2_xoff,OLDX2
  1445.  move.l PLR2_zoff,OLDZ2
  1446.  
  1447.  
  1448.  
  1449.  move.l #$dff000,a6
  1450.  
  1451.  cmp.b #'s',mors
  1452.  beq ASlaveShouldWaitOnHisMaster
  1453.  
  1454.  cmp.b #'n',mors
  1455.  bne NotOnePlayer
  1456.  
  1457.  move.w PLR1_energy,Energy
  1458.  move.w FramesToDraw,TempFrames
  1459.  cmp.w #15,TempFrames
  1460.  blt.s .okframe
  1461.  move.w #15,TempFrames
  1462. .okframe:
  1463.  move.w #0,FramesToDraw
  1464.  
  1465. *********************************************
  1466. *********** TAKE THIS OUT *******************
  1467. *********************************************
  1468.  
  1469.  move.l CHEATPTR,a4
  1470.  add.l #200000,a4
  1471.  moveq #0,d0
  1472.  move.b (a4),d0
  1473.  
  1474.  move.l #KeyMap,a5
  1475.  tst.b (a5,d0.w)
  1476.  beq.s .nocheat
  1477.  
  1478.  addq #1,a4
  1479.  cmp.l #ENDCHEAT,a4
  1480.  blt.s .nocheat
  1481.  cmp.w #0,CHEATNUM
  1482.  beq.s .nocheat
  1483.  sub.w #1,CHEATNUM
  1484.  move.l #CHEATFRAME,a4
  1485.  move.w #127,PLR1_energy
  1486.  bsr EnergyBar
  1487. .nocheat
  1488.  
  1489.  sub.l #200000,a4
  1490.  move.l a4,CHEATPTR
  1491.  
  1492. **********************************************
  1493. **********************************************
  1494. **********************************************
  1495.  
  1496.  move.l PLR1s_xoff,p1_xoff
  1497.  move.l PLR1s_zoff,p1_zoff
  1498.  move.l PLR1s_yoff,p1_yoff
  1499.  move.l PLR1s_height,p1_height
  1500.  move.w PLR1s_angpos,p1_angpos
  1501.  move.w PLR1_bobble,p1_bobble
  1502.  move.b PLR1_clicked,p1_clicked
  1503.  move.b PLR1_fire,p1_fire
  1504.  clr.b PLR1_clicked
  1505.  move.b PLR1_SPCTAP,p1_spctap
  1506.  clr.b PLR1_SPCTAP
  1507.  move.b PLR1_Ducked,p1_ducked
  1508.  move.b PLR1_GunSelected,p1_gunselected
  1509.  
  1510.  bsr PLR1_Control
  1511.  
  1512.  move.l PLR1_Roompt,a0
  1513.  move.l ToZoneRoof(a0),SplitHeight
  1514.  move.w p1_xoff,THISPLRxoff
  1515.  move.w p1_zoff,THISPLRzoff
  1516.  
  1517.  
  1518.  move.l #$60000,p2_yoff
  1519.  move.l PLR2_Obj,a0
  1520.  move.w #-1,GraphicRoom(a0)
  1521.  move.w #-1,12(a0)
  1522.  move.b #0,17(a0)
  1523.  move.l #BollocksRoom,PLR2_Roompt
  1524.  
  1525.  bra donetalking
  1526.  
  1527. NotOnePlayer:
  1528.  move.l #KeyMap,a5
  1529.  tst.b $19(a5)
  1530.  sne MASTERPAUSE
  1531.  
  1532. *********************************
  1533.  move.w PLR1_energy,Energy
  1534. ; change this back
  1535. *********************************
  1536.  
  1537.  jsr SENDFIRST
  1538.  
  1539.  move.w FramesToDraw,TempFrames
  1540.  cmp.w #15,TempFrames
  1541.  blt.s .okframe
  1542.  move.w #15,TempFrames
  1543. .okframe:
  1544.  move.w #0,FramesToDraw
  1545.  
  1546.  move.l PLR1s_xoff,p1_xoff
  1547.  move.l PLR1s_zoff,p1_zoff
  1548.  move.l PLR1s_yoff,p1_yoff
  1549.  move.l PLR1s_height,p1_height
  1550.  move.w PLR1s_angpos,p1_angpos
  1551.  move.w PLR1_bobble,p1_bobble
  1552.  move.b PLR1_clicked,p1_clicked
  1553.  clr.b PLR1_clicked
  1554.  move.b PLR1_fire,p1_fire
  1555.  move.b PLR1_SPCTAP,p1_spctap
  1556.  clr.b PLR1_SPCTAP
  1557.  move.b PLR1_Ducked,p1_ducked
  1558.  move.b PLR1_GunSelected,p1_gunselected
  1559.  
  1560.  move.l p1_xoff,d0
  1561.  jsr SENDFIRST
  1562.  move.l d0,p2_xoff
  1563.  
  1564.  move.l p1_zoff,d0
  1565.  jsr SENDFIRST
  1566.  move.l d0,p2_zoff 
  1567.  
  1568.  move.l p1_yoff,d0
  1569.  jsr SENDFIRST
  1570.  move.l d0,p2_yoff
  1571.   
  1572.  move.l p1_height,d0
  1573.  jsr SENDFIRST
  1574.  move.l d0,p2_height
  1575.  
  1576.  move.w p1_angpos,d0
  1577.  swap d0
  1578.  move.w p1_bobble,d0
  1579.  jsr SENDFIRST
  1580.  move.w d0,p2_bobble
  1581.  swap d0
  1582.  move.w d0,p2_angpos
  1583.  
  1584.  
  1585.  move.w TempFrames,d0
  1586.  swap d0
  1587.  move.b p1_spctap,d0
  1588.  lsl.w #8,d0
  1589.  move.b p1_clicked,d0
  1590.  jsr SENDFIRST
  1591.  move.b d0,p2_clicked
  1592.  lsr.w #8,d0
  1593.  move.b d0,p2_spctap
  1594.  
  1595.  
  1596.  move.w Rand1,d0
  1597.  swap d0
  1598.  move.b p1_ducked,d0
  1599.  lsl.w #8,d0
  1600.  move.b p1_gunselected,d0
  1601.  jsr SENDFIRST
  1602.  move.b d0,p2_gunselected
  1603.  lsr.w #8,d0
  1604.  move.b d0,p2_ducked
  1605.  
  1606.  move.b p1_fire,d0
  1607.  lsl.w #8,d0
  1608.  move.b MASTERQUITTING,d0
  1609.  or.b d0,SLAVEQUITTING
  1610.  swap d0
  1611.  move.b MASTERPAUSE,d0
  1612.  or.b d0,SLAVEPAUSE
  1613.  jsr SENDFIRST
  1614.  or.b d0,MASTERPAUSE
  1615.  or.b d0,SLAVEPAUSE
  1616.  swap d0
  1617.  or.b d0,SLAVEQUITTING
  1618.  or.b d0,MASTERQUITTING
  1619.  lsr.w #8,d0
  1620.  move.b d0,p2_fire
  1621.  
  1622.  bsr PLR1_Control
  1623.  bsr PLR2_Control
  1624.  move.l PLR1_Roompt,a0
  1625.  move.l ToZoneRoof(a0),SplitHeight
  1626.  move.w p1_xoff,THISPLRxoff
  1627.  move.w p1_zoff,THISPLRzoff
  1628.  
  1629.  bra donetalking
  1630.  
  1631. ASlaveShouldWaitOnHisMaster:
  1632.  
  1633.  move.l #KeyMap,a5
  1634.  tst.b $19(a5)
  1635.  sne SLAVEPAUSE
  1636.  
  1637.  
  1638.  move.w PLR2_energy,Energy
  1639.  
  1640.  jsr RECFIRST
  1641.  
  1642.  move.l PLR2s_xoff,p2_xoff
  1643.  move.l PLR2s_zoff,p2_zoff
  1644.  move.l PLR2s_yoff,p2_yoff
  1645.  move.l PLR2s_height,p2_height
  1646.  move.w PLR2s_angpos,p2_angpos
  1647.  move.w PLR2_bobble,p2_bobble
  1648.  move.b PLR2_clicked,p2_clicked
  1649.  clr.b PLR2_clicked
  1650.  move.b PLR2_fire,p2_fire
  1651.  move.b PLR2_SPCTAP,p2_spctap
  1652.  clr.b PLR2_SPCTAP
  1653.  move.b PLR2_Ducked,p2_ducked
  1654.  move.b PLR2_GunSelected,p2_gunselected
  1655.  
  1656.  move.l p2_xoff,d0
  1657.  jsr RECFIRST
  1658.  move.l d0,p1_xoff
  1659.  
  1660.  move.l p2_zoff,d0
  1661.  jsr RECFIRST
  1662.  move.l d0,p1_zoff
  1663.  
  1664.  move.l p2_yoff,d0
  1665.  jsr RECFIRST
  1666.  move.l d0,p1_yoff
  1667.  
  1668.  move.l p2_height,d0
  1669.  jsr RECFIRST
  1670.  move.l d0,p1_height
  1671.  
  1672.  move.w p2_angpos,d0
  1673.  swap d0
  1674.  move.w p2_bobble,d0
  1675.  jsr RECFIRST
  1676.  move.w d0,p1_bobble
  1677.  swap d0
  1678.  move.w d0,p1_angpos
  1679.  
  1680.  
  1681.  move.b p2_spctap,d0
  1682.  lsl.w #8,d0
  1683.  move.b p2_clicked,d0
  1684.  jsr RECFIRST
  1685.  move.b d0,p1_clicked
  1686.  lsr.w #8,d0
  1687.  move.b d0,p1_spctap
  1688.  swap d0
  1689.  move.w d0,TempFrames
  1690.  
  1691.  
  1692.  move.b p2_ducked,d0
  1693.  lsl.w #8,d0
  1694.  move.b p2_gunselected,d0
  1695.  jsr RECFIRST
  1696.  move.b d0,p1_gunselected
  1697.  lsr.w #8,d0
  1698.  move.b d0,p1_ducked
  1699.  swap d0
  1700.  move.w d0,Rand1
  1701.  
  1702.  move.b p2_fire,d0
  1703.  lsl.w #8,d0
  1704.  move.b SLAVEQUITTING,d0
  1705.  or.b d0,MASTERQUITTING
  1706.  swap d0
  1707.  move.b SLAVEPAUSE,d0
  1708.  or.b d0,MASTERPAUSE
  1709.  jsr RECFIRST
  1710.  or.b d0,MASTERPAUSE
  1711.  or.b d0,SLAVEPAUSE
  1712.  swap d0
  1713.  or.b d0,SLAVEQUITTING
  1714.  or.b d0,MASTERQUITTING
  1715.  lsr.w #8,d0
  1716.  move.b d0,p1_fire
  1717.  
  1718.  
  1719.  bsr PLR1_Control
  1720.  bsr PLR2_Control
  1721.  move.w p2_xoff,THISPLRxoff
  1722.  move.w p2_zoff,THISPLRzoff
  1723.  move.l PLR2_Roompt,a0
  1724.  move.l ToZoneRoof(a0),SplitHeight
  1725.  
  1726. donetalking:
  1727.  
  1728.  
  1729.  
  1730.  
  1731.  move.l #ZoneBrightTable,a1
  1732.  move.l ZoneAdds,a2
  1733.  move.l PLR2_ListOfGraphRooms,a0
  1734.  move.l PLR2_PointsToRotatePtr,a5
  1735.  cmp.b #'s',mors
  1736.  beq.s doallz
  1737.  move.l PLR1_ListOfGraphRooms,a0
  1738.  move.l PLR1_PointsToRotatePtr,a5
  1739.  
  1740. doallz
  1741.  move.w (a0),d0
  1742.  blt.s doneallz
  1743.  add.w #8,a0
  1744.  
  1745.  move.l (a2,d0.w*4),a3
  1746.  add.l LEVELDATA,a3
  1747.  move.w ToZoneBrightness(a3),d2
  1748.  
  1749.  blt.s justbright
  1750.  move.w d2,d3
  1751.  lsr.w #8,d3
  1752.  tst.b d3
  1753.  beq.s justbright
  1754.  
  1755.  move.l #BrightAnimTable,a4
  1756.  move.w -2(a4,d3.w*2),d2
  1757.  
  1758. justbright:
  1759.  move.w d2,(a1,d0.w*4)
  1760.  
  1761.  move.w ToUpperBrightness(a3),d2
  1762.  
  1763.  blt.s justbright2
  1764.  move.w d2,d3
  1765.  lsr.w #8,d3
  1766.  tst.b d3
  1767.  beq.s justbright2
  1768.  
  1769.  move.l #BrightAnimTable,a4
  1770.  move.w -2(a4,d3.w*2),d2
  1771.  
  1772. justbright2:
  1773.  move.w d2,2(a1,d0.w*4)
  1774.  
  1775.  bra doallz
  1776.  
  1777. doneallz:
  1778.  
  1779.  move.l PointBrights,a2
  1780.  move.l #CurrentPointBrights,a3
  1781. justtheone:
  1782.  move.w (a5)+,d0
  1783.  blt.s whythehell
  1784.  move.w (a2,d0.w*4),d2
  1785.  
  1786.  tst.b d2
  1787.  blt.s .justbright
  1788.  move.w d2,d3
  1789.  lsr.w #8,d3
  1790.  tst.b d3
  1791.  beq.s .justbright
  1792.  
  1793.  move.w d3,d4
  1794.  and.w #$f,d3
  1795.  lsr.w #4,d4
  1796.  add.w #1,d4
  1797.  
  1798.  move.l #BrightAnimTable,a0
  1799.  move.w -2(a0,d3.w*2),d3
  1800.  ext.w d2
  1801.  sub.w d2,d3
  1802.  muls d4,d3
  1803.  asr.w #4,d3
  1804.  add.w d3,d2
  1805.  
  1806. .justbright:
  1807.  ext.w d2
  1808.  
  1809.  move.w d2,(a3,d0.w*4)
  1810.  move.w 2(a2,d0.w*4),d2
  1811.  
  1812.  tst.b d2
  1813.  blt.s .justbright2
  1814.  move.w d2,d3
  1815.  lsr.w #8,d3
  1816.  tst.b d3
  1817.  beq.s .justbright2
  1818.  
  1819.  move.w d3,d4
  1820.  and.w #$f,d3
  1821.  lsr.w #4,d4
  1822.  add.w #1,d4
  1823.  
  1824.  move.l #BrightAnimTable,a0
  1825.  move.w -2(a0,d3.w*2),d3
  1826.  ext.w d2
  1827.  sub.w d2,d3
  1828.  muls d4,d3
  1829.  asr.w #4,d3
  1830.  add.w d3,d2
  1831.  
  1832. .justbright2:
  1833.  ext.w d2
  1834.  
  1835.  move.w d2,2(a3,d0.w*4)
  1836.  
  1837.  bra.s justtheone
  1838.  
  1839. whythehell:
  1840.  
  1841.  cmp.b #'n',mors
  1842.  beq nosee
  1843.  
  1844.  move.l PLR1_Roompt,FromRoom
  1845.  move.l PLR2_Roompt,ToRoom
  1846.  move.w p1_xoff,Viewerx
  1847.  move.w p1_zoff,Viewerz
  1848.  move.l p1_yoff,d0
  1849.  asr.l #7,d0
  1850.  move.w d0,Viewery
  1851.  move.w p2_xoff,Targetx
  1852.  move.w p2_zoff,Targetz
  1853.  move.l p2_yoff,d0
  1854.  asr.l #7,d0
  1855.  move.w d0,Targety
  1856.  move.b PLR1_StoodInTop,ViewerTop
  1857.  move.b PLR2_StoodInTop,TargetTop
  1858.  jsr CanItBeSeen
  1859.  
  1860.  move.l PLR1_Obj,a0
  1861.  move.b CanSee,d0
  1862.  and.b #2,d0
  1863.  move.b d0,17(a0)
  1864.  move.l PLR2_Obj,a0
  1865.  move.b CanSee,d0
  1866.  and.b #1,d0
  1867.  move.b d0,17(a0)
  1868.  
  1869. nosee:
  1870.  
  1871.  move.l PLR1_Obj,a0
  1872.  move.b #5,16(a0)
  1873.  move.l PLR2_Obj,a0
  1874.  move.b #11,16(a0)
  1875.  
  1876.  move.w TempFrames,d0
  1877.  add.w d0,p1_holddown
  1878.  cmp.w #30,p1_holddown
  1879.  blt.s oklength
  1880.  move.w #30,p1_holddown
  1881. oklength:
  1882.  
  1883.  tst.b p1_fire
  1884.  bne.s okstillheld
  1885.  sub.w d0,p1_holddown
  1886.  bge.s okstillheld
  1887.  move.w #0,p1_holddown
  1888.  
  1889. okstillheld:
  1890.  
  1891.  move.w TempFrames,d0
  1892.  add.w d0,p2_holddown
  1893.  
  1894.  cmp.w #30,p2_holddown
  1895.  blt.s oklength2
  1896.  move.w #30,p2_holddown
  1897. oklength2:
  1898.  
  1899.  
  1900.  tst.b p2_fire
  1901.  bne.s okstillheld2
  1902.  sub.w d0,p2_holddown
  1903.  bge.s okstillheld2
  1904.  move.w #0,p2_holddown
  1905. okstillheld2:
  1906.  
  1907. ; move.l #PLR1_GunData,a1
  1908. ; move.w p1_holddown,d0
  1909. ; move.w #50,10+32*3(a1)
  1910. ; move.l #PLR2_GunData,a1
  1911. ; move.w p2_holddown,d0
  1912. ; move.w #50,10+32*3(a1)
  1913.  
  1914.  
  1915. ******************************************
  1916. ******************************************
  1917.  
  1918.  move.w TempFrames,d1
  1919.  bgt.s noze
  1920.  moveq #1,d1
  1921. noze:
  1922.  
  1923.  move.w PLR1_xoff,d0
  1924.  sub.w OLDX1,d0
  1925.  asl.w #4,d0
  1926.  ext.l d0
  1927.  divs d1,d0
  1928.  move.w d0,XDIFF1
  1929.  move.w PLR2_xoff,d0
  1930.  sub.w OLDX2,d0
  1931.  asl.w #4,d0
  1932.  ext.l d0
  1933.  divs d1,d0
  1934.  move.w d0,XDIFF2
  1935.  move.w PLR1_zoff,d0
  1936.  sub.w OLDZ1,d0
  1937.  asl.w #4,d0
  1938.  ext.l d0
  1939.  divs d1,d0
  1940.  move.w d0,ZDIFF1
  1941.  move.w PLR2_zoff,d0
  1942.  sub.w OLDZ2,d0
  1943.  asl.w #4,d0
  1944.  ext.l d0
  1945.  divs d1,d0
  1946.  move.w d0,ZDIFF2
  1947.  
  1948.  cmp.b #'s',mors
  1949.  beq.s ImPlayer2OhYesIAm
  1950.  bsr USEPLR1
  1951.  bra IWasPlayer1
  1952.  
  1953. ImPlayer2OhYesIAm:
  1954.  bsr USEPLR2
  1955. IWasPlayer1:
  1956.  
  1957.  
  1958.  cmp.b #'s',mors
  1959.  beq drawplayer2
  1960.  
  1961.  move.w #0,scaleval
  1962.  
  1963.  move.l PLR1_xoff,xoff
  1964.  move.l PLR1_yoff,yoff
  1965.  move.l PLR1_zoff,zoff
  1966.  move.w PLR1_angpos,angpos
  1967.  move.w PLR1_cosval,cosval
  1968.  move.w PLR1_sinval,sinval
  1969.  
  1970.  
  1971.  move.l PLR1_ListOfGraphRooms,ListOfGraphRooms
  1972.  move.l PLR1_PointsToRotatePtr,PointsToRotatePtr
  1973.  move.l PLR1_Roompt,Roompt
  1974.  
  1975.  bsr OrderZones
  1976.  jsr objmoveanim
  1977.  bsr EnergyBar
  1978.  bsr AmmoBar
  1979.  
  1980.  move.w #0,leftclip
  1981.  move.w #96,rightclip
  1982.  move.w #0,deftopclip
  1983.  
  1984.  move.w #79,defbotclip
  1985.  move.w #0,topclip
  1986.  move.w #79,botclip
  1987. ; sub.l #10*104*4,frompt
  1988. ; sub.l #10*104*4,midpt
  1989.  
  1990. * Subroom loop
  1991.  
  1992.  
  1993.  bsr DrawDisplay 
  1994.  
  1995.  bra nodrawp2
  1996.  
  1997. drawplayer2
  1998.  
  1999.  move.w #0,scaleval
  2000.  move.l PLR2_xoff,xoff
  2001.  move.l PLR2_yoff,yoff
  2002.  move.l PLR2_zoff,zoff
  2003.  move.w PLR2_angpos,angpos
  2004.  move.w PLR2_cosval,cosval
  2005.  move.w PLR2_sinval,sinval 
  2006.  
  2007.  
  2008.  
  2009.  move.l PLR2_ListOfGraphRooms,ListOfGraphRooms
  2010.  move.l PLR2_PointsToRotatePtr,PointsToRotatePtr
  2011.  move.l PLR2_Roompt,Roompt
  2012.  
  2013.  bsr OrderZones
  2014.  jsr objmoveanim
  2015.  bsr EnergyBar
  2016.  bsr AmmoBar
  2017.  
  2018.  move.w #0,leftclip
  2019.  move.w #96,rightclip
  2020.  move.w #0,deftopclip
  2021.  move.w #79,defbotclip
  2022.  move.w #0,topclip
  2023.  move.w #79,botclip
  2024.  
  2025.  bsr DrawDisplay
  2026.  
  2027. nodrawp2:
  2028.  
  2029. ***************************************** 
  2030. * Copy from copbuff to chip ram
  2031.  
  2032.  
  2033. ; move.l drawpt,a3
  2034. ; adda.w #10,a3
  2035. ; move.l COPSCRNBUFF,a2
  2036. ; move.w #2,d6
  2037. ; adda.w #10,a2
  2038. ;COPYOUT
  2039. ; move.w #31,d0
  2040. ;COPYDOWN1:
  2041. ; move.w #3,d1
  2042. ; move.l a2,a4
  2043. ; move.l a3,a5
  2044. ;.inlop1:
  2045. ;val SET 0
  2046. ; REPT 20
  2047. ; move.w val(a4),val(a5)
  2048. ;val SET val+104*4
  2049. ; ENDR
  2050. ; adda.l #104*4*20,a4
  2051. ; adda.l #104*4*20,a5
  2052. ; dbra d1,.inlop1
  2053. ; addq #4,a2
  2054. ; addq #4,a3
  2055. ; dbra d0,COPYDOWN1
  2056. ; addq #4,a2
  2057. ; addq #4,a3
  2058. ; dbra d6,COPYOUT 
  2059.  
  2060.  
  2061. ***************************************** 
  2062.  move.l PLR2_Roompt,a0
  2063.  move.l #WorkSpace,a1
  2064.  clr.l (a1)
  2065.  clr.l 4(a1)
  2066.  clr.l 8(a1)
  2067.  clr.l 12(a1)
  2068.  clr.l 16(a1)
  2069.  clr.l 20(a1)
  2070.  clr.l 24(a1)
  2071.  clr.l 28(a1)
  2072.  
  2073.  cmp.b #'n',mors
  2074.  beq.s plr1only
  2075.  
  2076.  lea ToListOfGraph(a0),a0
  2077. .doallrooms:
  2078.  move.w (a0),d0
  2079.  blt.s .allroomsdone
  2080.  addq #8,a0
  2081.  move.w d0,d1
  2082.  asr.w #3,d0
  2083.  bset d1,(a1,d0.w)
  2084.  bra .doallrooms
  2085. .allroomsdone:
  2086.  
  2087. plr1only:
  2088.  
  2089.  move.l PLR1_Roompt,a0
  2090.  lea ToListOfGraph(a0),a0
  2091. .doallrooms2:
  2092.  move.w (a0),d0
  2093.  blt.s .allroomsdone2
  2094.  addq #8,a0
  2095.  move.w d0,d1
  2096.  asr.w #3,d0
  2097.  bset d1,(a1,d0.w)
  2098.  bra .doallrooms2
  2099. .allroomsdone2:
  2100.  
  2101.  move.l ObjectData,a0
  2102.  sub.w #64,a0
  2103. .doallobs:
  2104.  add.w #64,a0
  2105.  move.w (a0),d0
  2106.  blt.s .allobsdone
  2107.  move.w 12(a0),d0
  2108.  blt.s .doallobs
  2109.  move.w d0,d1
  2110.  asr.w #3,d0
  2111.  btst d1,(a1,d0.w)
  2112.  beq.s .doallobs
  2113.  or.b #127,worry(a0)
  2114.  bra.s .doallobs
  2115. .allobsdone:
  2116.  
  2117.  
  2118.  
  2119. ; move.l #brightentab,a0
  2120. ; move.l frompt,a3
  2121. ; adda.w #(4*33)+(104*4*20),a3
  2122. ; move.w #20,d7
  2123. ; move.w #20,d6
  2124. ;horl:
  2125. ; move.w d6,d5
  2126. ; move.l a3,a1
  2127. ;vertl
  2128. ; move.w (a1),d0
  2129. ; move.w (a0,d0.w*2),(a1)
  2130. ; addq #4,a1
  2131. ; dbra d5,vertl
  2132. ; adda.w #104*4,a3
  2133. ; dbra d7,horl
  2134.  
  2135.  move.l #$dff000,a6
  2136.  
  2137. ; move.w #$300,col0(a6)
  2138.  
  2139.  move.l #KeyMap,a5
  2140.  tst.b $45(a5)
  2141.  beq.s noend
  2142.  
  2143.  cmp.b #'s',mors
  2144.  beq plr2quit 
  2145.  
  2146.  st MASTERQUITTING
  2147.  bra noend
  2148.  
  2149. plr2quit:
  2150.  st SLAVEQUITTING
  2151. noend:
  2152.  
  2153.  tst.b MASTERQUITTING
  2154.  beq.s .noquit
  2155.  tst.b SLAVEQUITTING
  2156.  bne endnomusic
  2157. .noquit
  2158.  
  2159.  cmp.b #'n',mors
  2160.  bne.s noexit
  2161.  move.l PLR1_Roompt,a0
  2162.  move.w (a0),d0
  2163.  move.w PLOPT,d1
  2164.  move.l #ENDZONES,a0
  2165.  cmp.w (a0,d1.w*2),d0
  2166.  
  2167. ; change this for quick exit, charlie
  2168. zzzz:
  2169. ; bra end
  2170.  
  2171.  beq end
  2172. noexit:
  2173.  
  2174.  tst.w PLR1_energy
  2175.  ble end
  2176.  tst.w PLR2_energy
  2177.  ble end
  2178.  
  2179. ; move.l SwitchData,a0
  2180. ; tst.b 24+8(a0)
  2181. ; bne end
  2182.   
  2183.  JSR STOPTIMER
  2184.  
  2185.  bra lop
  2186.  
  2187. MASTERQUITTING: dc.b 0
  2188. SLAVEQUITTING: dc.b 0
  2189. MASTERPAUSE: dc.b 0
  2190. SLAVEPAUSE: dc.b 0
  2191.  
  2192. PAUSEOPTS:
  2193.  include "ab3:source_4000/pauseopts"
  2194.  
  2195. ENDZONES:
  2196. ; LEVEL 1
  2197.  dc.w 55
  2198. ; LEVEL 2
  2199.  dc.w 149
  2200. ; LEVEL 3
  2201.  dc.w 155
  2202. ; LEVEL 4
  2203.  dc.w 107
  2204. ; LEVEL 5
  2205.  dc.w 67
  2206. ; LEVEL 6
  2207.  dc.w 132
  2208. ; LEVEL 7
  2209.  dc.w 203
  2210. ; LEVEL 8
  2211.  dc.w 166
  2212. ; LEVEL 9
  2213.  dc.w 118
  2214. ; LEVEL 10
  2215.  dc.w 102
  2216. ; LEVEL 11
  2217.  dc.w 103
  2218. ; LEVEL 12
  2219.  dc.w 2
  2220. ; LEVEL 13
  2221.  dc.w 98
  2222. ; LEVEL 14
  2223.  dc.w 0
  2224. ; LEVEL 15
  2225.  dc.w 148
  2226. ; LEVEL 16
  2227.  dc.w 103
  2228.  
  2229. ***************************************************************************
  2230. ***************************************************************************
  2231. ****************** End of Main Loop here ********************************** 
  2232. ***************************************************************************
  2233. ***************************************************************************
  2234.  
  2235. putinsmallscr:
  2236.  move.l #$1fe0000,statskip
  2237.  move.l #$1fe0000,statskip+4
  2238.  
  2239.  move.l #healthpal,a5
  2240.  move.l COPSCRN1,a0
  2241.  move.l COPSCRN2,a2
  2242.  move.w #scrheight-1,d0
  2243.  move.l #0,d6
  2244.  move.w #0,d3
  2245.  move.w #$2bdf,startwait
  2246.  move.w #$2d01,endwait
  2247. .fillcop
  2248.  move.w #$180,d1
  2249.  
  2250.  move.l a0,a1
  2251.  move.l a2,a3
  2252.  move.w #$10c,(a1)+
  2253.  move.w #$10c,(a3)+
  2254.  move.w d3,(a1)+
  2255.  move.w d3,(a3)+
  2256.  eor.w #$8000,d3
  2257.  
  2258.  move.w #$106,(a1)+
  2259.  move.w #$106,(a3)+
  2260.  move.w #$2c42,d5
  2261.  or.w d3,d5
  2262.  and.w #$fffe,d5
  2263.  move.w d5,(a1)+
  2264.  move.w d5,(a3)+
  2265.  bsr do32
  2266.  
  2267.  move.w #$106,(a1)+
  2268.  move.w #$106,(a3)+
  2269.  move.w #$4c42,d5
  2270.  or.w d3,d5
  2271.  and.w #$fffe,d5
  2272.  move.w d5,(a1)+
  2273.  move.w d5,(a3)+
  2274.  bsr do32
  2275.  
  2276.  move.w #$106,(a1)+
  2277.  move.w #$106,(a3)+
  2278.  move.w #$6c42,d5
  2279.  or.w d3,d5
  2280.  and.w #$fffe,d5
  2281.  move.w d5,(a1)+
  2282.  move.w d5,(a3)+
  2283.  bsr do32
  2284.  
  2285.  
  2286.  move.l #$1060c42,(a1)+
  2287.  move.l #$1060c42,(a3)+
  2288.  move.w #$19e,(a1)+
  2289.  move.w (a5),(a1)+
  2290.  move.w #$19e,(a3)+
  2291.  move.w (a5)+,(a3)+
  2292.  
  2293. **********************************
  2294.  
  2295.  adda.w #104*4,a0
  2296.  adda.w #104*4,a2
  2297.  dbra d0,.fillcop
  2298.  
  2299.  move.w #$48,fetchstart
  2300.  move.w #$88,fetchstop
  2301.  move.w #$2cb1,winstart
  2302.  move.w #$2c91,winstop
  2303.  move.w #-24,modulo
  2304.  move.w #-24,modulo+4
  2305.  
  2306.  move.l #nullspr,d0
  2307.  move.w d0,s4l
  2308.  move.w d0,s5l
  2309.  move.w d0,s6l
  2310.  move.w d0,s7l
  2311.  swap d0
  2312.  move.w d0,s4h
  2313.  move.w d0,s5h
  2314.  move.w d0,s6h
  2315.  move.w d0,s7h 
  2316.  
  2317.  move.l #borders,d0
  2318.  move.w d0,s0l
  2319.  swap d0
  2320.  move.w d0,s0h
  2321.  move.l #borders+2592,d0
  2322.  move.w d0,s1l
  2323.  swap d0
  2324.  move.w d0,s1h
  2325.  move.l #borders+2592*2,d0
  2326.  move.w d0,s2l
  2327.  swap d0
  2328.  move.w d0,s2h
  2329.  move.l #borders+2592*3,d0
  2330.  move.w d0,s3l
  2331.  swap d0
  2332.  move.w d0,s3h
  2333.  
  2334.  
  2335.  move.l #scrn+40,a0
  2336.  move.l #scrn+160,a1
  2337.  move.l #scrn+280,a2
  2338.  move.l #smallscrntab,a3
  2339.  move.w #191,d7    ; counter
  2340.  move.w #0,d1    ; xpos
  2341. .plotscrnloop:
  2342.  move.b (a3)+,d0
  2343.  move.w d1,d2
  2344.  asr.w #3,d2
  2345.  move.b d1,d3
  2346.  not.b d3
  2347.  bclr.b d3,-40(a0,d2.w)
  2348.  bclr.b d3,(a0,d2.w)
  2349.  bclr.b d3,40(a0,d2.w)
  2350.  bclr.b d3,-40(a1,d2.w)
  2351.  bclr.b d3,(a1,d2.w)
  2352.  bclr.b d3,40(a1,d2.w)
  2353.  bclr.b d3,-40(a2,d2.w)
  2354.  btst #0,d0
  2355.  beq.s .nobp1
  2356.  bset.b d3,-40(a0,d2.w)
  2357. .nobp1:
  2358.  btst #1,d0
  2359.  beq.s .nobp2
  2360.  bset.b d3,(a0,d2.w)
  2361. .nobp2:
  2362.  btst #2,d0
  2363.  beq.s .nobp3
  2364.  bset.b d3,40(a0,d2.w)
  2365. .nobp3:
  2366.  btst #3,d0
  2367.  beq.s .nobp4
  2368.  bset.b d3,-40(a1,d2.w)
  2369. .nobp4:
  2370.  btst #4,d0
  2371.  beq.s .nobp5
  2372.  bset.b d3,(a1,d2.w)
  2373. .nobp5:
  2374.  btst #5,d0
  2375.  beq.s .nobp6
  2376.  bset.b d3,40(a1,d2.w)
  2377. .nobp6:
  2378.  btst #6,d0
  2379.  beq.s .nobp7
  2380.  bset.b d3,-40(a2,d2.w)
  2381. .nobp7:
  2382.  
  2383.  addq #1,d1
  2384.  
  2385.  dbra d7,.plotscrnloop
  2386.  
  2387.  
  2388.  rts
  2389.  
  2390. putinlargescr:
  2391.  
  2392.  move.l #$1000000,statskip
  2393.  move.l #$fffffffe,statskip+4
  2394.  
  2395.  move.l #healthpal,a5
  2396.  move.l COPSCRN1,a0
  2397.  move.l COPSCRN2,a2
  2398.  move.w #scrheight-1,d0
  2399.  move.l #0,d6
  2400.  move.w #0,d3
  2401.  move.w #$29df,startwait
  2402.  move.w #$2b01,endwait
  2403. .fillcop
  2404.  move.w #$180,d1
  2405.  
  2406.  move.l a0,a1
  2407.  move.l a2,a3
  2408.  move.w #$10c,(a1)+
  2409.  move.w #$10c,(a3)+
  2410.  move.w d3,(a1)+
  2411.  move.w d3,(a3)+
  2412.  eor.w #$8000,d3
  2413.  
  2414.  move.w #$106,(a1)+
  2415.  move.w #$106,(a3)+
  2416.  move.w #$2c42,d5
  2417.  or.w d3,d5
  2418.  and.w #$fffe,d5
  2419.  move.w d5,(a1)+
  2420.  move.w d5,(a3)+
  2421.  bsr do32
  2422.  
  2423.  move.w #$106,(a1)+
  2424.  move.w #$106,(a3)+
  2425.  move.w #$4c42,d5
  2426.  or.w d3,d5
  2427.  and.w #$fffe,d5
  2428.  move.w d5,(a1)+
  2429.  move.w d5,(a3)+
  2430.  bsr do32
  2431.  
  2432.  move.w #$106,(a1)+
  2433.  move.w #$106,(a3)+
  2434.  move.w #$6c42,d5
  2435.  or.w d3,d5
  2436.  and.w #$fffe,d5
  2437.  move.w d5,(a1)+
  2438.  move.w d5,(a3)+
  2439.  bsr do32
  2440.  
  2441.  move.w startwait,(a1)+
  2442.  move.w #$fffe,(a1)+
  2443.  move.w endwait,(a1)+
  2444.  move.w #$ff00,(a1)+
  2445.  move.w startwait,(a3)+
  2446.  move.w #$fffe,(a3)+
  2447.  move.w endwait,(a3)+
  2448.  move.w #$ff00,(a3)+
  2449.  
  2450. ; move.l $1fe0000,(a1)+
  2451. ; move.l $1fe0000,(a3)+
  2452. ; move.l $1fe0000,(a1)+
  2453. ; move.l $1fe0000,(a3)+
  2454.  
  2455.  
  2456.  add.w #$300,startwait
  2457.  add.w #$300,endwait
  2458.  
  2459. ; move.l #$1060c42,(a1)+
  2460. ; move.l #$1060c42,(a3)+
  2461. ; move.w #$19e,(a1)+
  2462. ; move.w (a5),(a1)+
  2463. ; move.w #$19e,(a3)+
  2464. ; move.w (a5)+,(a3)+
  2465.  
  2466. **********************************
  2467.  
  2468.  adda.w #104*4,a0
  2469.  adda.w #104*4,a2
  2470.  dbra d0,.fillcop
  2471.  
  2472.  move.w #$38,fetchstart
  2473.  move.w #$b8,fetchstop
  2474.  move.w #$2c81,winstart
  2475.  move.w #$2cc1,winstop
  2476.  move.w #-40,modulo
  2477.  move.w #-40,modulo+4
  2478.  
  2479.  move.l #nullspr,d0
  2480.  move.w d0,s0l
  2481.  move.w d0,s1l
  2482.  move.w d0,s2l
  2483.  move.w d0,s3l
  2484.  move.w d0,s4l
  2485.  move.w d0,s5l
  2486.  move.w d0,s6l
  2487.  move.w d0,s7l
  2488.  swap d0
  2489.  move.w d0,s0h
  2490.  move.w d0,s1h
  2491.  move.w d0,s2h
  2492.  move.w d0,s3h
  2493.  move.w d0,s4h
  2494.  move.w d0,s5h
  2495.  move.w d0,s6h
  2496.  move.w d0,s7h 
  2497.  
  2498.  move.l #scrn+40,a0
  2499.  move.l #scrn+160,a1
  2500.  move.l #scrn+280,a2
  2501.  move.l #scrntab,a3
  2502.  move.w #319,d7    ; counter
  2503.  move.w #0,d1    ; xpos
  2504. .plotscrnloop:
  2505.  move.b (a3)+,d0
  2506.  move.w d1,d2
  2507.  asr.w #3,d2
  2508.  move.b d1,d3
  2509.  not.b d3
  2510.  bclr.b d3,-40(a0,d2.w)
  2511.  bclr.b d3,(a0,d2.w)
  2512.  bclr.b d3,40(a0,d2.w)
  2513.  bclr.b d3,-40(a1,d2.w)
  2514.  bclr.b d3,(a1,d2.w)
  2515.  bclr.b d3,40(a1,d2.w)
  2516.  bclr.b d3,-40(a2,d2.w)
  2517.  btst #0,d0
  2518.  beq.s .nobp1
  2519.  bset.b d3,-40(a0,d2.w)
  2520. .nobp1:
  2521.  btst #1,d0
  2522.  beq.s .nobp2
  2523.  bset.b d3,(a0,d2.w)
  2524. .nobp2:
  2525.  btst #2,d0
  2526.  beq.s .nobp3
  2527.  bset.b d3,40(a0,d2.w)
  2528. .nobp3:
  2529.  btst #3,d0
  2530.  beq.s .nobp4
  2531.  bset.b d3,-40(a1,d2.w)
  2532. .nobp4:
  2533.  btst #4,d0
  2534.  beq.s .nobp5
  2535.  bset.b d3,(a1,d2.w)
  2536. .nobp5:
  2537.  btst #5,d0
  2538.  beq.s .nobp6
  2539.  bset.b d3,40(a1,d2.w)
  2540. .nobp6:
  2541.  btst #6,d0
  2542.  beq.s .nobp7
  2543.  bset.b d3,-40(a2,d2.w)
  2544. .nobp7:
  2545.  
  2546.  addq #1,d1
  2547.  
  2548.  dbra d7,.plotscrnloop
  2549.  
  2550.  rts
  2551.  
  2552. CLEARKEYBOARD:
  2553.  move.l #KeyMap,a5
  2554.  moveq #0,d0
  2555.  move.w #15,d1
  2556. clrloo:
  2557.  move.l d0,(a5)+
  2558.  move.l d0,(a5)+
  2559.  move.l d0,(a5)+
  2560.  move.l d0,(a5)+
  2561.  dbra d1,clrloo
  2562.  rts
  2563.  
  2564. READCONTROLS: dc.w 0
  2565.  
  2566. tstststst: dc.w 0
  2567.  
  2568. BollocksRoom:
  2569.  dc.w -1
  2570.  ds.l 50
  2571.  
  2572. GUNYOFFS:
  2573.  dc.w 20
  2574.  dc.w 20
  2575.  dc.w 0
  2576.  dc.w 20
  2577.  dc.w 20
  2578.  dc.w 0
  2579.  dc.w 0
  2580.  dc.w 20
  2581.  
  2582. USEPLR1:
  2583.  
  2584. ***********************************
  2585.  
  2586.  move.l PLR1_Obj,a0 
  2587.  move.l ObjectPoints,a1
  2588.  move.l #ObjRotated,a2
  2589.  move.w (a0),d0
  2590.  move.l PLR1_xoff,(a1,d0.w*8)
  2591.  move.l PLR1_zoff,4(a1,d0.w*8)
  2592.  move.l PLR1_Roompt,a1
  2593.  
  2594.  moveq #0,d2
  2595.  move.b damagetaken(a0),d2
  2596.  beq .notbeenshot
  2597.  move.w #$f00,hitcol
  2598.  move.w #$f00,hitcol2
  2599.  sub.w d2,PLR1_energy
  2600.  movem.l d0-d7/a0-a6,-(a7)
  2601.  move.b #$fb,IDNUM
  2602.  move.w #19,Samplenum
  2603.  clr.b notifplaying
  2604.  move.w #0,Noisex
  2605.  move.w #0,Noisez
  2606.  move.w #100,Noisevol
  2607.  jsr MakeSomeNoise
  2608.  
  2609.  movem.l (a7)+,d0-d7/a0-a6
  2610.  
  2611. .notbeenshot
  2612.  move.b #0,damagetaken(a0)
  2613.  move.b PLR1_energy+1,numlives(a0)
  2614.  
  2615.  move.b PLR1_StoodInTop,ObjInTop(a0)
  2616.  
  2617.  move.w (a1),12(a0)
  2618.  move.w (a1),d2
  2619.  move.l #ZoneBrightTable,a1
  2620.  move.l (a1,d2.w*4),d2
  2621.  tst.b PLR1_StoodInTop
  2622.  bne.s .okinbott
  2623.  swap d2
  2624. .okinbott:
  2625.  
  2626.  move.w d2,2(a0)
  2627.  
  2628.  move.l p1_yoff,d0
  2629.  move.l p1_height,d1
  2630.  asr.l #1,d1
  2631.  add.l d1,d0
  2632.  asr.l #7,d0
  2633.  move.w d0,4(a0)
  2634.  
  2635. ***********************************
  2636.  
  2637.  move.l PLR2_Obj,a0 
  2638.  
  2639.  move.w PLR2_angpos,d0
  2640.  and.w #8190,d0
  2641.  move.w d0,Facing(a0)
  2642.  
  2643.  jsr ViewpointToDraw
  2644.  asl.w #2,d0
  2645.  moveq #0,d1
  2646.  move.b p2_bobble,d1
  2647.  not.b d1
  2648.  lsr.b #3,d1
  2649.  and.b #$3,d1
  2650.  add.w d1,d0
  2651.  move.w d0,10(a0)
  2652.  move.w #10,8(a0)
  2653.  
  2654.  move.l ObjectPoints,a1
  2655.  move.l #ObjRotated,a2
  2656.  move.w (a0),d0
  2657.  move.l PLR2_xoff,(a1,d0.w*8)
  2658.  move.l PLR2_zoff,4(a1,d0.w*8)
  2659.  move.l PLR2_Roompt,a1
  2660.  
  2661.  moveq #0,d2
  2662.  move.b damagetaken(a0),d2
  2663.  beq .notbeenshot2
  2664.  sub.w d2,PLR2_energy
  2665. .notbeenshot2
  2666.  move.b #0,damagetaken(a0)
  2667.  move.b PLR2_energy+1,numlives(a0)
  2668.  
  2669.  move.b PLR2_StoodInTop,ObjInTop(a0)
  2670.  
  2671.  move.w (a1),12(a0)
  2672.  move.w (a1),d2
  2673.  move.l #ZoneBrightTable,a1
  2674.  move.l (a1,d2.w*4),d2
  2675.  tst.b PLR2_StoodInTop
  2676.  bne.s .okinbott2
  2677.  swap d2
  2678. .okinbott2:
  2679.  
  2680.  move.w d2,2(a0)
  2681.  
  2682.  move.l p2_yoff,d0
  2683.  move.l p2_height,d1
  2684.  asr.l #1,d1
  2685.  add.l d1,d0
  2686.  asr.l #7,d0
  2687.  move.w d0,4(a0)
  2688.  
  2689. **********************************
  2690.  
  2691.  
  2692.  move.l PLR1_Obj,a0
  2693.  move.w #-1,12+128(a0)
  2694.  
  2695.  rts
  2696.  
  2697. DRAWINGUN:
  2698.  move.l #Objects+9*16,a0
  2699.  move.l 4(a0),a5    ; ptr
  2700.  move.l 8(a0),a2    ; frames
  2701.  move.l 12(a0),a4    ; pal
  2702.  move.l (a0),a0        ; wad
  2703.  
  2704.  move.l #GunAnims,a1
  2705.  move.l (a1,d0.w*8),a1
  2706.  move.w (a1,d1.w*2),d5    ; frame of anim
  2707.  
  2708.  move.l #GUNYOFFS,a1
  2709.  move.w (a1,d0.w*2),d7    ; yoff
  2710.  move.l frompt,a6
  2711.  move.w d7,d6
  2712.  muls #104*4,d6
  2713.  add.l d6,a6    ; screen pointer
  2714.  
  2715.  asl.w #2,d0
  2716.  add.w d5,d0    ; frame
  2717.  move.w (a2,d0.w*4),d1    ; xoff
  2718.  
  2719.  lea (a5,d1.w),a5    ; right ptr
  2720.  
  2721.  move.w #31,d0
  2722.  bsr DRAWCHUNK
  2723.  addq.w #4,a6
  2724.  move.w #31,d0
  2725.  bsr DRAWCHUNK
  2726.  addq.w #4,a6
  2727.  move.w #31,d0
  2728.  bsr DRAWCHUNK
  2729.  rts
  2730.  
  2731.  
  2732. DRAWCHUNK:
  2733.  move.w #78,d3
  2734.  sub.w d7,d3
  2735.  move.l a6,a3
  2736.  move.b (a5),d2
  2737.  move.l (a5)+,d1
  2738.  bne.s .noblank
  2739.  addq #4,a6
  2740.  dbra d0,DRAWCHUNK 
  2741.  rts
  2742.  
  2743. .noblank:
  2744.  and.l #$ffffff,d1
  2745.  lea (a0,d1.l),a1
  2746.  cmp.b #1,d2
  2747.  bgt.s thirdd
  2748.  beq.s secc
  2749. .drawdown:
  2750.  move.w (a1)+,d2
  2751.  and.w #%11111,d2
  2752.  beq.s .itsblank
  2753.  move.w (a4,d2.w*2),(a3)
  2754. .itsblank
  2755.  add.w #104*4,a3
  2756.  dbra d3,.drawdown
  2757.  
  2758.  addq #4,a6
  2759.  dbra d0,DRAWCHUNK
  2760.  rts
  2761.  
  2762. secc:
  2763. .drawdown:
  2764.  move.w (a1)+,d2
  2765.  lsr.w #5,d2
  2766.  and.w #%11111,d2
  2767.  beq.s .itsblank
  2768.  move.w (a4,d2.w*2),(a3)
  2769. .itsblank
  2770.  add.w #104*4,a3
  2771.  dbra d3,.drawdown
  2772.  
  2773.  addq #4,a6
  2774.  dbra d0,DRAWCHUNK
  2775.  rts
  2776.  
  2777. thirdd:
  2778. .drawdown:
  2779.  move.b (a1),d2
  2780.  addq #2,a1
  2781.  lsr.b #2,d2
  2782.  and.w #%11111,d2
  2783.  beq.s .itsblank
  2784.  move.w (a4,d2.w*2),(a3)
  2785. .itsblank
  2786.  add.w #104*4,a3
  2787.  dbra d3,.drawdown
  2788.  
  2789.  addq #4,a6
  2790.  dbra d0,DRAWCHUNK
  2791.  rts
  2792.  
  2793.  
  2794.  
  2795. ***************************************************
  2796. **************************************************
  2797.  
  2798. USEPLR2:
  2799.  
  2800.  PROTKCHECK a0
  2801.  
  2802. ***********************************
  2803.  
  2804.  move.l PLR2_Obj,a0 
  2805.  move.l ObjectPoints,a1
  2806.  move.l #ObjRotated,a2
  2807.  move.w (a0),d0
  2808.  move.l PLR2_xoff,(a1,d0.w*8)
  2809.  move.l PLR2_zoff,4(a1,d0.w*8)
  2810.  move.l PLR2_Roompt,a1
  2811.  
  2812.  moveq #0,d2
  2813.  move.b damagetaken(a0),d2
  2814.  beq .notbeenshot
  2815.  move.w #$f00,hitcol
  2816.  move.w #$f00,hitcol2
  2817.  sub.w d2,PLR2_energy
  2818.  movem.l d0-d7/a0-a6,-(a7)
  2819.  move.w #19,Samplenum
  2820.  clr.b notifplaying
  2821.  move.b #$fb,IDNUM
  2822.  move.w #0,Noisex
  2823.  move.w #0,Noisez
  2824.  move.w #100,Noisevol
  2825.  jsr MakeSomeNoise
  2826.  
  2827.  movem.l (a7)+,d0-d7/a0-a6
  2828.  
  2829. .notbeenshot
  2830.  move.b #0,damagetaken(a0)
  2831.  move.b PLR2_energy+1,numlives(a0)
  2832.  
  2833.  move.b PLR2_StoodInTop,ObjInTop(a0)
  2834.  
  2835.  move.w (a1),12(a0)
  2836.  move.w (a1),d2
  2837.  move.l #ZoneBrightTable,a1
  2838.  move.l (a1,d2.w*4),d2
  2839.  tst.b PLR2_StoodInTop
  2840.  bne.s .okinbott
  2841.  swap d2
  2842. .okinbott:
  2843.  
  2844.  move.w d2,2(a0)
  2845.  
  2846.  move.l PLR2_yoff,d0
  2847.  move.l p2_height,d1
  2848.  asr.l #1,d1
  2849.  add.l d1,d0
  2850.  asr.l #7,d0
  2851.  move.w d0,4(a0)
  2852.  
  2853. ***********************************
  2854.  
  2855.  move.l PLR1_Obj,a0 
  2856.  
  2857.  move.w PLR1_angpos,d0
  2858.  and.w #8190,d0
  2859.  move.w d0,Facing(a0)
  2860.  
  2861.  jsr ViewpointToDraw
  2862.  asl.w #2,d0
  2863.  moveq #0,d1
  2864.  move.b p1_bobble,d1
  2865.  not.b d1
  2866.  lsr.b #3,d1
  2867.  and.b #$3,d1
  2868.  add.w d1,d0
  2869.  move.w d0,10(a0)
  2870.  move.w #10,8(a0)
  2871.  
  2872.  move.l ObjectPoints,a1
  2873.  move.l #ObjRotated,a2
  2874.  move.w (a0),d0
  2875.  move.l PLR1_xoff,(a1,d0.w*8)
  2876.  move.l PLR1_zoff,4(a1,d0.w*8)
  2877.  move.l PLR1_Roompt,a1
  2878.  
  2879.  moveq #0,d2
  2880.  move.b damagetaken(a0),d2
  2881.  beq .notbeenshot2
  2882.  sub.w d2,PLR1_energy
  2883. .notbeenshot2
  2884.  move.b #0,damagetaken(a0)
  2885.  move.b PLR1_energy+1,numlives(a0)
  2886.  
  2887.  move.b PLR1_StoodInTop,ObjInTop(a0)
  2888.  
  2889.  move.w (a1),12(a0)
  2890.  move.w (a1),d2
  2891.  move.l #ZoneBrightTable,a1
  2892.  move.l (a1,d2.w*4),d2
  2893.  tst.b PLR1_StoodInTop
  2894.  bne.s .okinbott2
  2895.  swap d2
  2896. .okinbott2:
  2897.  
  2898.  move.w d2,2(a0)
  2899.  
  2900.  move.l PLR1_yoff,d0
  2901.  move.l p1_height,d1
  2902.  asr.l #1,d1
  2903.  add.l d1,d0
  2904.  asr.l #7,d0
  2905.  move.w d0,4(a0)
  2906.  
  2907. **********************************
  2908.  
  2909.  move.l PLR2_Obj,a0
  2910.  move.w #-1,12+64(a0)
  2911.  
  2912.  rts
  2913.  
  2914.  
  2915. GunSelected: dc.b 0
  2916.  even
  2917.  
  2918. GunAnims:
  2919.  dc.l MachineAnim,3
  2920.  dc.l PlasmaAnim,5
  2921.  dc.l RocketAnim,5
  2922.  dc.l FlameThrowerAnim,5
  2923.  dc.l GrenadeAnim,12
  2924.  dc.l 0,0
  2925.  dc.l 0,0
  2926.  dc.l ShotGunAnim,12+19+11+20+1
  2927.  
  2928. MachineAnim:
  2929.  dc.w 0,1,2,3
  2930. PlasmaAnim:
  2931.  dc.w 0,1,2,3,3,3
  2932. RocketAnim:
  2933.  dc.w 0,1,2,3,3,3
  2934. FlameThrowerAnim:
  2935.  dc.w 0,1,2,3,3,3
  2936. GrenadeAnim:
  2937.  dc.w 0,1,1,1,1
  2938.  dc.w 2,2,2,2,3
  2939.  dc.w 3,3,3
  2940. ShotGunAnim:
  2941.  dc.w 0
  2942.  dcb.w 12,2
  2943.  dcb.w 19,1
  2944.  dcb.w 11,2
  2945.  dcb.w 20,0
  2946.  dc.w 3
  2947.  
  2948. GunData: dc.l 0
  2949.  
  2950. PLR1_GunData:
  2951. ; 0=Pistol 1=Big Gun
  2952. ; ammoleft,ammopershot(b),gunnoise(b),ammoinclip(b)
  2953.  
  2954. ; VISIBLE/INSTANT (0/FF)
  2955. ; damage,gotgun(b)
  2956. ; Delay (w), Lifetime of bullet (w)
  2957. ; Click or hold down (0,1)
  2958. ; BulSpd: (w)
  2959.  
  2960. ;0
  2961.  dc.w 0
  2962. ;2
  2963.  dc.b 8,3
  2964. ;4
  2965.  dc.b 15
  2966. ;5
  2967.  dc.b -1
  2968. ;6
  2969.  dc.b 4,$ff
  2970. ;8
  2971.  dc.w 5,-1,1,0
  2972. ;16
  2973.  dc.w 0,0,0
  2974. ;22
  2975.  dc.w 1
  2976.  
  2977.  ds.w 4
  2978.  
  2979. ;PlasmaGun
  2980.  
  2981.  dc.w 0
  2982.  dc.b 8,1
  2983.  dc.b 20
  2984.  dc.b 0
  2985.  dc.b 16,0
  2986.  dc.w 10,-1,0,5
  2987.  dc.w 0,0,0
  2988.  dc.w 1
  2989.  
  2990.  ds.w 4
  2991.  
  2992. ;RocketLauncher
  2993.  
  2994.  dc.w 0
  2995.  dc.b 8,9
  2996.  dc.b 2
  2997.  dc.b 0
  2998.  dc.b 12,0
  2999.  dc.w 30,-1,0,5
  3000.  dc.w 0,0,0
  3001.  dc.w 1
  3002.  
  3003.  
  3004.  ds.w 4
  3005.  
  3006. ; FlameThrower
  3007.  
  3008.  dc.w 90*8
  3009.  dc.b 1,22
  3010.  dc.b 40
  3011.  dc.b 0
  3012.  dc.b 8,$0    
  3013.  dc.w 5,50,1,4
  3014.  dc.w 0,0,0
  3015.  dc.w 1
  3016.  
  3017.  ds.w 4
  3018.  
  3019. ;Grenade launcher
  3020.  
  3021.  
  3022.  dc.w 0
  3023.  dc.b 8,9
  3024.  dc.b 6
  3025.  dc.b 0
  3026.  dc.b 8,0
  3027.  dc.w 50,100,1,5
  3028.  dc.w 60,3
  3029.  dc.w -1000
  3030.  dc.w 1
  3031.  
  3032.  ds.w 4
  3033.  
  3034. ; WORMGUN
  3035.  
  3036.  dc.w 0
  3037.  dc.b 0,0
  3038.  dc.b 0
  3039.  dc.b 0,0
  3040.  dc.w 0,-1,0,5
  3041.  dc.w 0,0
  3042.  dc.w 0
  3043.  dc.w 1
  3044.  ds.w 4
  3045.  
  3046. ; ToughMarineGun
  3047.  
  3048.  dc.w 0
  3049.  dc.b 0,0
  3050.  dc.b 0
  3051.  dc.b 0,0
  3052.  dc.w 0,-1,0,5
  3053.  dc.w 0,0
  3054.  dc.w 0
  3055.  dc.w 1
  3056.  ds.w 4
  3057.  
  3058. ; Shotgun
  3059.  
  3060. ;0
  3061.  dc.w 0
  3062. ;2
  3063.  dc.b 8,21
  3064. ;4
  3065.  dc.b 15
  3066. ;5
  3067.  dc.b -1
  3068. ;6
  3069.  dc.b 4,0
  3070. ;8
  3071.  dc.w 50,-1,1,0
  3072. ;16
  3073.  dc.w 0,0,0
  3074. ;22
  3075.  dc.w 7
  3076.  
  3077.  ds.w 4
  3078.  
  3079. PLR2_GunData:
  3080. ; 0=Pistol 1=Big Gun
  3081. ; ammoleft,ammopershot(b),gunnoise(b),ammoinclip(b)
  3082.  
  3083. ; VISIBLE/INSTANT (0/FF)
  3084. ; damage,gotgun(b)
  3085. ; Delay (w)
  3086.  
  3087. ;0
  3088.  dc.w 0
  3089. ;2
  3090.  dc.b 8,3
  3091. ;4
  3092.  dc.b 15
  3093. ;5
  3094.  dc.b -1
  3095. ;6
  3096.  dc.b 4,$ff
  3097. ;8
  3098.  dc.w 5,-1,1,0
  3099. ;16
  3100.  dc.w 0,0,0
  3101. ;22
  3102.  dc.w 1
  3103.  
  3104.  ds.w 4
  3105.  
  3106. ;PlasmaGun
  3107.  
  3108.  dc.w 0
  3109.  dc.b 8,1
  3110.  dc.b 20
  3111.  dc.b 0
  3112.  dc.b 16,0
  3113.  dc.w 10,-1,0,5
  3114.  dc.w 0,0,0
  3115.  dc.w 1
  3116.  
  3117.  ds.w 4
  3118.  
  3119. ;RocketLauncher
  3120.  
  3121.  dc.w 0
  3122.  dc.b 8,9
  3123.  dc.b 2
  3124.  dc.b 0
  3125.  dc.b 12,0
  3126.  dc.w 30,-1,0,5
  3127.  dc.w 0,0,0
  3128.  dc.w 1
  3129.  
  3130.  
  3131.  ds.w 4
  3132.  
  3133. ; FlameThrower
  3134.  
  3135.  dc.w 90*8
  3136.  dc.b 1,22
  3137.  dc.b 40
  3138.  dc.b 0
  3139.  dc.b 8,$0    
  3140.  dc.w 5,50,1,4
  3141.  dc.w 0,0,0
  3142.  dc.w 1
  3143.  
  3144.  ds.w 4
  3145.  
  3146. ;Grenade launcher
  3147.  
  3148.  
  3149.  dc.w 0
  3150.  dc.b 8,9
  3151.  dc.b 6
  3152.  dc.b 0
  3153.  dc.b 8,0
  3154.  dc.w 50,100,1,5
  3155.  dc.w 60,3
  3156.  dc.w -1000
  3157.  dc.w 1
  3158.  
  3159.  ds.w 4
  3160.  
  3161. ; WORMGUN
  3162.  
  3163.  dc.w 0
  3164.  dc.b 0,0
  3165.  dc.b 0
  3166.  dc.b 0,0
  3167.  dc.w 0,-1,0,5
  3168.  dc.w 0,0
  3169.  dc.w 0
  3170.  dc.w 1
  3171.  ds.w 4
  3172.  
  3173. ; ToughMarineGun
  3174.  
  3175.  dc.w 0
  3176.  dc.b 0,0
  3177.  dc.b 0
  3178.  dc.b 0,0
  3179.  dc.w 0,-1,0,5
  3180.  dc.w 0,0
  3181.  dc.w 0
  3182.  dc.w 1
  3183.  ds.w 4
  3184.  
  3185. ; Shotgun
  3186.  
  3187. ;0
  3188.  dc.w 0
  3189. ;2
  3190.  dc.b 8,21
  3191. ;4
  3192.  dc.b 15
  3193. ;5
  3194.  dc.b -1
  3195. ;6
  3196.  dc.b 4,0
  3197. ;8
  3198.  dc.w 50,-1,1,0
  3199. ;16
  3200.  dc.w 0,0,0
  3201. ;22
  3202.  dc.w 7
  3203.  
  3204.  ds.w 4
  3205.  
  3206.  
  3207.  
  3208. protA: dc.w 0
  3209.  
  3210. Path:
  3211. ; incbin "testpath"
  3212. endpath:
  3213. pathpt: dc.l Path
  3214.  
  3215.  
  3216. PLR1KEYS: dc.b 0
  3217. PLR1PATH: dc.b 0
  3218. PLR1MOUSE: dc.b -1
  3219. PLR1JOY: dc.b 0
  3220. PLR2KEYS: dc.b 0
  3221. PLR2PATH: dc.b 0
  3222. PLR2MOUSE: dc.b -1
  3223. PLR2JOY: dc.b 0
  3224.  
  3225.  even
  3226.  
  3227. PLR1_bobble: dc.w 0
  3228. PLR2_bobble: dc.w 0
  3229. xwobble: dc.l 0
  3230. xwobxoff: dc.w 0
  3231.  
  3232. xwobzoff: dc.w 0
  3233.  
  3234. PLR1_Control:
  3235.  
  3236. ; Take a snapshot of everything.
  3237.  
  3238.  move.l PLR1_xoff,d2
  3239.  move.l d2,PLR1_oldxoff
  3240.  move.l d2,oldx
  3241.  move.l PLR1_zoff,d3
  3242.  move.l d3,PLR1_oldzoff
  3243.  move.l d3,oldz
  3244.  move.l p1_xoff,d0
  3245.  move.l d0,PLR1_xoff
  3246.  move.l d0,newx
  3247.  move.l p1_zoff,d1
  3248.  move.l d1,newz
  3249.  move.l d1,PLR1_zoff
  3250.  
  3251.  move.l p1_height,PLR1_height
  3252.  
  3253.  sub.l d2,d0
  3254.  sub.l d3,d1
  3255.  move.l d0,xdiff
  3256.  move.l d1,zdiff
  3257.  move.w p1_angpos,d0
  3258.  move.w d0,PLR1_angpos
  3259.  
  3260.  move.l #SineTable,a1
  3261.  move.w (a1,d0.w),PLR1_sinval
  3262.  add.w #2048,d0
  3263.  and.w #8190,d0
  3264.  move.w (a1,d0.w),PLR1_cosval
  3265.  
  3266.  move.l p1_yoff,d0
  3267.  move.w p1_bobble,d1
  3268.  move.w (a1,d1.w),d1
  3269.  move.w d1,d3
  3270.  ble.s notnegative
  3271.  neg.w d1
  3272. notnegative:
  3273.  add.w #16384,d1
  3274.  asr.w #4,d1
  3275.  
  3276.  tst.b PLR1_Ducked
  3277.  bne.s .notdouble
  3278.  add.w d1,d1
  3279. .notdouble
  3280.  ext.l d1
  3281.  move.l PLR1_height,d4
  3282.  sub.l d1,d4
  3283.  add.l d1,d0
  3284.  
  3285.  cmp.b #'s',mors
  3286.  beq.s .otherwob
  3287.  asr.w #6,d3
  3288.  ext.l d3
  3289.  move.l d3,xwobble
  3290.  move.w PLR1_sinval,d1
  3291.  muls d3,d1
  3292.  move.w PLR1_cosval,d2
  3293.  muls d3,d2
  3294.  swap d1
  3295.  swap d2
  3296.  asr.w #7,d1
  3297.  move.w d1,xwobxoff
  3298.  asr.w #7,d2
  3299.  neg.w d2
  3300.  move.w d2,xwobzoff
  3301. .otherwob
  3302.  
  3303.  move.l d0,PLR1_yoff
  3304.  move.l d0,newy
  3305.  move.l d0,oldy
  3306.  
  3307.  move.l d4,thingheight
  3308.  move.l #40*256,StepUpVal
  3309.  tst.b PLR1_Ducked
  3310.  beq.s .okbigstep
  3311.  move.l #10*256,StepUpVal
  3312. .okbigstep:
  3313.  
  3314.  move.l #$1000000,StepDownVal
  3315.  
  3316.  move.l PLR1_Roompt,a0
  3317.  move.w ToTelZone(a0),d0
  3318.  blt .noteleport
  3319.  
  3320.  move.w ToTelX(a0),newx
  3321.  move.w ToTelZ(a0),newz
  3322.  move.w #-1,CollId
  3323.  move.l #%111111111111111111,CollideFlags
  3324.  bsr Collision
  3325.  tst.b hitwall
  3326.  beq.s .teleport
  3327.  
  3328.  move.w PLR1_xoff,newx
  3329.  move.w PLR1_zoff,newz
  3330.  bra .noteleport
  3331.  
  3332. .teleport:
  3333.  
  3334.  move.l PLR1_Roompt,a0
  3335.  move.w ToTelZone(a0),d0
  3336.  move.w ToTelX(a0),PLR1_xoff
  3337.  move.w ToTelZ(a0),PLR1_zoff
  3338.  move.l PLR1_yoff,d1
  3339.  sub.l ToZoneFloor(a0),d1
  3340.  move.l ZoneAdds,a0
  3341.  move.l (a0,d0.w*4),a0
  3342.  add.l LEVELDATA,a0
  3343.  move.l a0,PLR1_Roompt
  3344.  add.l ToZoneFloor(a0),d1
  3345.  move.l d1,PLR1s_yoff
  3346.  move.l d1,PLR1_yoff
  3347.  move.l d1,PLR1s_tyoff
  3348.  move.l PLR1_xoff,PLR1s_xoff
  3349.  move.l PLR1_zoff,PLR1s_zoff
  3350.  
  3351.  SAVEREGS
  3352.  move.w #0,Noisex
  3353.  move.w #0,Noisez
  3354.  move.w #26,Samplenum
  3355.  move.w #100,Noisevol
  3356.  move.b #$fa,IDNUM
  3357.  jsr MakeSomeNoise
  3358.  GETREGS
  3359.  
  3360.  bra .cantmove
  3361.  
  3362. .noteleport:
  3363.  
  3364.  move.l PLR1_Roompt,objroom
  3365.  move.w #%100000000,wallflags
  3366.  move.b PLR1_StoodInTop,StoodInTop
  3367.  
  3368.  move.l #%1011111110111000001,CollideFlags
  3369.  move.w #-1,CollId
  3370.  
  3371.  bsr Collision
  3372.  tst.b hitwall
  3373.  beq.s .nothitanything
  3374.  move.w oldx,PLR1_xoff
  3375.  move.w oldz,PLR1_zoff
  3376.  move.l PLR1_xoff,PLR1s_xoff
  3377.  move.l PLR1_zoff,PLR1s_zoff
  3378.  bra .cantmove
  3379. .nothitanything:
  3380.  
  3381.  move.w #40,extlen
  3382.  move.b #0,awayfromwall
  3383.  
  3384.  clr.b exitfirst
  3385.  clr.b wallbounce
  3386.  bsr MoveObject
  3387.  move.b StoodInTop,PLR1_StoodInTop
  3388.  move.l objroom,PLR1_Roompt
  3389.  move.w newx,PLR1_xoff
  3390.  move.w newz,PLR1_zoff
  3391.  move.l PLR1_xoff,PLR1s_xoff
  3392.  move.l PLR1_zoff,PLR1s_zoff
  3393.  
  3394. .cantmove:
  3395.  
  3396.  move.l PLR1_Roompt,a0
  3397.  
  3398.  move.l ToZoneFloor(a0),d0
  3399.  tst.b PLR1_StoodInTop
  3400.  beq.s notintop
  3401.  move.l ToUpperFloor(a0),d0
  3402. notintop:
  3403.  
  3404.  adda.w #ToZonePts,a0
  3405.  sub.l PLR1_height,d0
  3406.  move.l d0,PLR1s_tyoff
  3407.  move.w p1_angpos,tmpangpos
  3408.  
  3409. ; move.l (a0),a0        ; jump to viewpoint list
  3410.  * A0 is pointing at a pointer to list of points to rotate
  3411.  move.w (a0)+,d1
  3412.  ext.l d1
  3413.  add.l PLR1_Roompt,d1
  3414.  move.l d1,PLR1_PointsToRotatePtr
  3415.  tst.w (a0)+
  3416.  sne.s DRAWNGRAPHTOP
  3417.  beq.s nobackgraphics
  3418.  cmp.b #'s',mors
  3419.  beq.s nobackgraphics
  3420.  move.l a0,-(a7)
  3421.  jsr putinbackdrop 
  3422.  move.l (a7)+,a0
  3423. nobackgraphics:
  3424.  adda.w #10,a0
  3425.  move.l a0,PLR1_ListOfGraphRooms
  3426.  
  3427. *************************************************
  3428.  rts
  3429.  
  3430. DRAWNGRAPHTOP
  3431.  
  3432. tstzone: dc.l 0
  3433. CollId: dc.w 0
  3434.  
  3435. PLR2_Control:
  3436.  
  3437.  PROTLCHECK a0
  3438.  
  3439. ; Take a snapshot of everything.
  3440.  
  3441.  move.l PLR2_xoff,d2
  3442.  move.l d2,PLR2_oldxoff
  3443.  move.l d2,oldx
  3444.  move.l PLR2_zoff,d3
  3445.  move.l d3,PLR2_oldzoff
  3446.  move.l d3,oldz
  3447.  move.l p2_xoff,d0
  3448.  move.l d0,PLR2_xoff
  3449.  move.l d0,newx
  3450.  move.l p2_zoff,d1
  3451.  move.l d1,newz
  3452.  move.l d1,PLR2_zoff
  3453.  
  3454.  move.l p2_height,PLR2_height
  3455.  
  3456.  sub.l d2,d0
  3457.  sub.l d3,d1
  3458.  move.l d0,xdiff
  3459.  move.l d1,zdiff
  3460.  move.w p2_angpos,d0
  3461.  move.w d0,PLR2_angpos
  3462.  
  3463.  move.l #SineTable,a1
  3464.  move.w (a1,d0.w),PLR2_sinval
  3465.  add.w #2048,d0
  3466.  and.w #8190,d0
  3467.  move.w (a1,d0.w),PLR2_cosval
  3468.  
  3469.  move.l p2_yoff,d0
  3470.  move.w p2_bobble,d1
  3471.  move.w (a1,d1.w),d1
  3472.  move.w d1,d3
  3473.  ble.s .notnegative
  3474.  neg.w d1
  3475. .notnegative:
  3476.  add.w #16384,d1
  3477.  asr.w #4,d1
  3478.  add.w d1,d1
  3479.  ext.l d1
  3480.  move.l PLR2_height,d4
  3481.  sub.l d1,d4
  3482.  add.l d1,d0
  3483.  
  3484.  cmp.b #'s',mors
  3485.  bne.s .otherwob
  3486.  asr.w #6,d3
  3487.  ext.l d3
  3488.  move.l d3,xwobble
  3489.  move.w PLR2_sinval,d1
  3490.  muls d3,d1
  3491.  move.w PLR2_cosval,d2
  3492.  muls d3,d2
  3493.  swap d1
  3494.  swap d2
  3495.  asr.w #7,d1
  3496.  move.w d1,xwobxoff
  3497.  asr.w #7,d2
  3498.  neg.w d2
  3499.  move.w d2,xwobzoff
  3500. .otherwob
  3501.  
  3502.  move.l d0,PLR2_yoff
  3503.  move.l d0,newy
  3504.  move.l d0,oldy
  3505.  
  3506.  move.l d4,thingheight
  3507.  move.l #40*256,StepUpVal
  3508.  tst.b PLR2_Ducked
  3509.  beq.s .okbigstep
  3510.  move.l #10*256,StepUpVal
  3511. .okbigstep:
  3512.  
  3513.  move.l #$1000000,StepDownVal
  3514.  
  3515.  move.l PLR2_Roompt,a0
  3516.  move.w ToTelZone(a0),d0
  3517.  blt .noteleport
  3518.  
  3519.  move.w ToTelX(a0),newx
  3520.  move.w ToTelZ(a0),newz
  3521.  move.w #-1,CollId
  3522.  move.l #%111111111111111111,CollideFlags
  3523.  bsr Collision
  3524.  tst.b hitwall
  3525.  beq.s .teleport
  3526.  
  3527.  move.w PLR2_xoff,newx
  3528.  move.w PLR2_zoff,newz
  3529.  bra .noteleport
  3530.  
  3531. .teleport:
  3532.  
  3533.  move.l PLR2_Roompt,a0
  3534.  move.w ToTelZone(a0),d0
  3535.  move.w ToTelX(a0),PLR2_xoff
  3536.  move.w ToTelZ(a0),PLR2_zoff
  3537.  move.l PLR2_yoff,d1
  3538.  sub.l ToZoneFloor(a0),d1
  3539.  move.l ZoneAdds,a0
  3540.  move.l (a0,d0.w*4),a0
  3541.  add.l LEVELDATA,a0
  3542.  move.l a0,PLR2_Roompt
  3543.  add.l ToZoneFloor(a0),d1
  3544.  move.l d1,PLR2s_yoff
  3545.  move.l d1,PLR2_yoff
  3546.  move.l d1,PLR2s_tyoff
  3547.  move.l PLR2_xoff,PLR2s_xoff
  3548.  move.l PLR2_zoff,PLR2s_zoff
  3549.  
  3550.  SAVEREGS
  3551.  move.w #0,Noisex
  3552.  move.w #0,Noisez
  3553.  move.w #26,Samplenum
  3554.  move.w #100,Noisevol
  3555.  move.b #$fa,IDNUM
  3556.  jsr MakeSomeNoise
  3557.  GETREGS
  3558.  
  3559.  bra .cantmove
  3560.  
  3561. .noteleport:
  3562.  
  3563.  move.l PLR2_Roompt,objroom
  3564.  move.w #%100000000000,wallflags
  3565.  move.b PLR2_StoodInTop,StoodInTop
  3566.  
  3567.  move.l #%1011111010111100001,CollideFlags
  3568.  move.w #-1,CollId
  3569.  
  3570.  bsr Collision
  3571.  tst.b hitwall
  3572.  beq.s .nothitanything
  3573.  move.w oldx,PLR2_xoff
  3574.  move.w oldz,PLR2_zoff
  3575.  move.l PLR2_xoff,PLR2s_xoff
  3576.  move.l PLR2_zoff,PLR2s_zoff
  3577.  bra .cantmove
  3578. .nothitanything:
  3579.  
  3580.  move.w #40,extlen
  3581.  move.b #0,awayfromwall
  3582.  
  3583.  clr.b exitfirst
  3584.  clr.b wallbounce
  3585.  bsr MoveObject
  3586.  move.b StoodInTop,PLR2_StoodInTop
  3587.  move.l objroom,PLR2_Roompt
  3588.  move.w newx,PLR2_xoff
  3589.  move.w newz,PLR2_zoff
  3590.  move.l PLR2_xoff,PLR2s_xoff
  3591.  move.l PLR2_zoff,PLR2s_zoff
  3592.  
  3593. .cantmove
  3594.  
  3595.  move.l PLR2_Roompt,a0
  3596.  
  3597.  move.l ToZoneFloor(a0),d0
  3598.  tst.b PLR2_StoodInTop
  3599.  beq.s .notintop
  3600.  move.l ToUpperFloor(a0),d0
  3601. .notintop:
  3602.  
  3603.  adda.w #ToZonePts,a0
  3604.  sub.l PLR2_height,d0
  3605.  move.l d0,PLR2s_tyoff
  3606.  move.w p2_angpos,tmpangpos
  3607.  
  3608. ; move.l (a0),a0        ; jump to viewpoint list
  3609.  * A0 is pointing at a pointer to list of points to rotate
  3610.  move.w (a0)+,d1
  3611.  ext.l d1
  3612.  add.l PLR2_Roompt,d1
  3613.  move.l d1,PLR2_PointsToRotatePtr
  3614.  tst.w (a0)+
  3615.  beq.s .nobackgraphics
  3616.  cmp.b #'s',mors
  3617.  bne.s .nobackgraphics
  3618.  move.l a0,-(a7)
  3619.  jsr putinbackdrop 
  3620.  move.l (a7)+,a0
  3621. .nobackgraphics:
  3622.  adda.w #10,a0
  3623.  move.l a0,PLR2_ListOfGraphRooms
  3624.  
  3625. *****************************************************
  3626.  
  3627.  rts
  3628.  
  3629.  
  3630. KeyMap: ds.b 256
  3631.  
  3632. fillscrnwater:
  3633.  dc.w 0
  3634. DONTDOGUN:
  3635.  dc.w 0
  3636.  
  3637.  
  3638. DrawDisplay:
  3639.  
  3640.  
  3641.  clr.b fillscrnwater
  3642.  
  3643.  move.l #SineTable,a0
  3644.  move.w angpos,d0
  3645.  move.w (a0,d0.w),d6
  3646.  adda.w #2048,a0
  3647.  move.w (a0,d0.w),d7
  3648.  move.w d6,sinval
  3649.  move.w d7,cosval
  3650.  
  3651.  move.l #KeyMap,a5
  3652.  moveq #0,d5
  3653.  move.b look_behind_key,d5
  3654.  tst.b (a5,d5.w)
  3655.  sne DONTDOGUN
  3656.  beq.s .nolookback
  3657.  neg.w cosval
  3658.  neg.w sinval
  3659. .nolookback:
  3660.  
  3661.  
  3662.  move.l yoff,d0
  3663.  asr.l #8,d0
  3664.  move.w d0,d1
  3665.  add.w #256-32,d1
  3666.  and.w #255,d1
  3667.  move.w d1,wallyoff
  3668.  asl.w #2,d0
  3669.  move.w d0,flooryoff
  3670.  
  3671.  move.w xoff,d6
  3672.  move.w d6,d3
  3673.  asr.w #1,d3
  3674.  add.w d3,d6
  3675.  asr.w #1,d6
  3676.  move.w d6,xoff34
  3677.  
  3678.  move.w zoff,d6
  3679.  move.w d6,d3
  3680.  asr.w #1,d3
  3681.  add.w d3,d6
  3682.  asr.w #1,d6
  3683.  move.w d6,zoff34
  3684.  
  3685.  bsr RotateLevelPts
  3686.  bsr RotateObjectPts
  3687.  bsr CalcPLR1InLine
  3688.  
  3689.  
  3690.  cmp.b #'n',mors
  3691.  bne.s doplr2too
  3692.  move.l PLR2_Obj,a0
  3693.  move.w #-1,12(a0)
  3694.  move.w #-1,GraphicRoom(a0)
  3695.  bra noplr2either
  3696.  
  3697. doplr2too:
  3698.  bsr CalcPLR2InLine
  3699. noplr2either:
  3700.  
  3701.  move.l endoflist,a0
  3702. subroomloop:
  3703.  move.w -(a0),d7
  3704.  blt jumpoutofrooms
  3705.  
  3706. ; bsr setlrclip
  3707. ; move.w leftclip,d0
  3708. ; cmp.w rightclip,d0
  3709. ; bge subroomloop
  3710.  move.l a0,-(a7)
  3711.  
  3712.  move.l ZoneAdds,a0
  3713.  move.l (a0,d7.w*4),a0
  3714.  add.l LEVELDATA,a0
  3715.  move.l ToZoneRoof(a0),SplitHeight
  3716.  move.l a0,ROOMBACK
  3717.  
  3718.  move.l ZoneGraphAdds,a0
  3719.  move.l 4(a0,d7.w*8),a2
  3720.  move.l (a0,d7.w*8),a0
  3721.  
  3722.  add.l LEVELGRAPHICS,a0
  3723.  add.l LEVELGRAPHICS,a2
  3724.  move.l a2,ThisRoomToDraw+4
  3725.  move.l a0,ThisRoomToDraw
  3726.  
  3727.  move.l ListOfGraphRooms,a1
  3728.  
  3729.  
  3730.  
  3731. finditit:
  3732.  tst.w (a1)
  3733.  blt nomoretodoatall
  3734.  cmp.w (a1),d7
  3735.  beq outoffind
  3736.  adda.w #8,a1
  3737.  bra finditit
  3738.  
  3739. outoffind:
  3740.  
  3741.  move.l a1,-(a7)
  3742.  
  3743.  
  3744.  move.w #0,leftclip
  3745.  move.w #96,rightclip
  3746.  moveq #0,d7
  3747.  move.w 2(a1),d7
  3748.  blt.s outofrcliplop
  3749.  move.l LEVELCLIPS,a0
  3750.  lea (a0,d7.l*2),a0
  3751.  
  3752.  tst.w (a0)
  3753.  blt outoflcliplop
  3754.  
  3755.  bsr NEWsetlclip
  3756.  
  3757. intolcliplop:        ; clips
  3758.  tst.w (a0)
  3759.  blt outoflcliplop
  3760.  
  3761.  bsr NEWsetlclip 
  3762.  bra intolcliplop
  3763.  
  3764. outoflcliplop:
  3765.  
  3766.  addq #2,a0
  3767.  
  3768.  tst.w (a0)
  3769.  blt outofrcliplop
  3770.  
  3771.  bsr NEWsetrclip
  3772.  
  3773. intorcliplop:        ; clips
  3774.  tst.w (a0)
  3775.  blt outofrcliplop
  3776.  
  3777.  bsr NEWsetrclip 
  3778.  bra intorcliplop
  3779.  
  3780. outofrcliplop:
  3781.  
  3782.  
  3783.  move.w leftclip,d0
  3784.  cmp.w #96,d0
  3785.  bge dontbothercantseeit
  3786.  move.w rightclip,d1
  3787.  blt dontbothercantseeit
  3788.  cmp.w d1,d0
  3789.  bge dontbothercantseeit
  3790.  
  3791.  move.l yoff,d0
  3792.  cmp.l SplitHeight,d0
  3793.  blt botfirst
  3794.  
  3795.  move.l ThisRoomToDraw+4,a0
  3796.  cmp.l LEVELGRAPHICS,a0
  3797.  beq.s noupperroom
  3798.  st DOUPPER
  3799.  
  3800.  move.l ROOMBACK,a1
  3801.  move.l ToUpperRoof(a1),TOPOFROOM
  3802.  move.l ToUpperFloor(a1),BOTOFROOM
  3803.  
  3804.  move.l #CurrentPointBrights+2,PointBrightsPtr
  3805.  bsr dothisroom
  3806. noupperroom:
  3807.  move.l ThisRoomToDraw,a0
  3808.  clr.b DOUPPER
  3809.  move.l #CurrentPointBrights,PointBrightsPtr
  3810.  
  3811.  move.l ROOMBACK,a1
  3812.  move.l ToZoneRoof(a1),d0
  3813.  move.l d0,TOPOFROOM
  3814.  move.l ToZoneFloor(a1),d1
  3815.  move.l d1,BOTOFROOM
  3816.  
  3817.  move.l ToZoneWater(a1),d2
  3818.  cmp.l yoff,d2
  3819.  blt.s .abovefirst
  3820.  move.l d2,BEFOREWATTOP
  3821.  move.l d1,BEFOREWATBOT
  3822.  move.l d2,AFTERWATBOT
  3823.  move.l d0,AFTERWATTOP
  3824.  bra.s .belowfirst
  3825. .abovefirst:
  3826.  move.l d0,BEFOREWATTOP
  3827.  move.l d2,BEFOREWATBOT
  3828.  move.l d1,AFTERWATBOT
  3829.  move.l d2,AFTERWATTOP
  3830. .belowfirst:
  3831.  
  3832.  bsr dothisroom
  3833.  
  3834.  bra dontbothercantseeit
  3835. botfirst:
  3836.  
  3837.  move.l ThisRoomToDraw,a0
  3838.  clr.b DOUPPER
  3839.  move.l #CurrentPointBrights,PointBrightsPtr
  3840.  
  3841.  move.l ROOMBACK,a1
  3842.  move.l ToZoneRoof(a1),d0
  3843.  move.l d0,TOPOFROOM
  3844.  move.l ToZoneFloor(a1),d1
  3845.  move.l d1,BOTOFROOM
  3846.  
  3847.  move.l ToZoneWater(a1),d2
  3848.  cmp.l yoff,d2
  3849.  blt.s .abovefirst
  3850.  move.l d2,BEFOREWATTOP
  3851.  move.l d1,BEFOREWATBOT
  3852.  move.l d2,AFTERWATBOT
  3853.  move.l d0,AFTERWATTOP
  3854.  bra.s .belowfirst
  3855. .abovefirst:
  3856.  move.l d0,BEFOREWATTOP
  3857.  move.l d2,BEFOREWATBOT
  3858.  move.l d1,AFTERWATBOT
  3859.  move.l d2,AFTERWATTOP
  3860. .belowfirst:
  3861.  
  3862.  
  3863.  bsr dothisroom
  3864.  move.l ThisRoomToDraw+4,a0
  3865.  cmp.l LEVELGRAPHICS,a0
  3866.  beq.s noupperroom2
  3867.  move.l #CurrentPointBrights+2,PointBrightsPtr
  3868.  
  3869.  move.l ROOMBACK,a1
  3870.  move.l ToUpperRoof(a1),TOPOFROOM
  3871.  move.l ToUpperFloor(a1),BOTOFROOM
  3872.  
  3873.  st DOUPPER
  3874.  bsr dothisroom
  3875. noupperroom2:
  3876.  
  3877. dontbothercantseeit:
  3878. pastemp:
  3879.  
  3880.  move.l (a7)+,a1
  3881.  move.l ThisRoomToDraw,a0
  3882.  move.w (a0),d7
  3883.  
  3884.  adda.w #8,a1
  3885.  bra finditit
  3886.  
  3887. nomoretodoatall:
  3888.  
  3889.  move.l (a7)+,a0
  3890.  
  3891.  bra subroomloop
  3892.  
  3893. jumpoutofrooms:
  3894.  
  3895.  tst.b DONTDOGUN
  3896.  bne NOGUNLOOK
  3897.  
  3898.  cmp.b #'s',mors
  3899.  beq.s drawslavegun
  3900.  
  3901.  moveq #0,d0
  3902.  move.b PLR1_GunSelected,d0
  3903.  moveq #0,d1
  3904.  move.b PLR1_GunFrame,d1
  3905.  bsr DRAWINGUN
  3906.  bra drawngun
  3907.  
  3908. drawslavegun
  3909.  moveq #0,d0
  3910.  move.b PLR2_GunSelected,d0
  3911.  moveq #0,d1
  3912.  move.b PLR2_GunFrame,d1
  3913.  bsr DRAWINGUN
  3914.  
  3915. drawngun:
  3916.  
  3917. NOGUNLOOK:
  3918.  
  3919.  moveq #0,d1
  3920.  move.b PLR1_GunFrame,d1
  3921.  sub.w TempFrames,d1
  3922.  bgt.s .nn
  3923.  moveq #0,d1
  3924. .nn
  3925.  move.b d1,PLR1_GunFrame
  3926.  
  3927.  ble.s .donefire
  3928.  sub.b #1,PLR1_GunFrame
  3929. .donefire:
  3930.  
  3931.  moveq #0,d1
  3932.  move.b PLR2_GunFrame,d1
  3933.  sub.w TempFrames,d1
  3934.  bgt.s .nn2
  3935.  moveq #0,d1
  3936. .nn2
  3937.  move.b d2,PLR2_GunFrame
  3938.  
  3939.  ble.s .donefire2
  3940.  sub.b #1,PLR2_GunFrame
  3941. .donefire2:
  3942.  
  3943.  
  3944.  move.w #3,d5
  3945.  tst.b fillscrnwater
  3946.  beq nowaterfull
  3947.  bgt oknothalf
  3948.  moveq #1,d5
  3949. oknothalf:
  3950.  
  3951.  bclr.b #1,$bfe001
  3952.  
  3953.  move.l #brightentab,a2
  3954.  moveq #0,d2
  3955.  move.l frompt,a0
  3956.  add.l #104*4*60,a0
  3957.  
  3958.  move.w #31,d0
  3959. fw:
  3960.  move.w d5,d1
  3961.  move.l a0,a1
  3962. fwd:
  3963. val SET 104*4*19
  3964.  REPT 20
  3965.  and.w #$ff,val(a1)
  3966. val SET val-104*4
  3967.  ENDR
  3968.  sub.l #104*4*20,a1
  3969.  dbra d1,fwd
  3970.  addq #4,a0
  3971.  dbra d0,fw
  3972.  
  3973.  addq #4,a0
  3974.  
  3975.  move.w #31,d0
  3976. sw:
  3977.  move.w d5,d1
  3978.  move.l a0,a1
  3979. swd:
  3980. val SET 104*4*19
  3981.  REPT 20
  3982.  and.w #$ff,val(a1)
  3983. val SET val-104*4
  3984.  ENDR
  3985.  sub.l #104*4*20,a1
  3986.  dbra d1,swd
  3987.  addq #4,a0
  3988.  dbra d0,sw
  3989.  
  3990.  addq #4,a0
  3991.  
  3992.  move.w #31,d0
  3993. tw:
  3994.  move.w d5,d1
  3995.  move.l a0,a1
  3996. twd:
  3997. val SET 104*4*19
  3998.  REPT 20
  3999.  and.w #$ff,val(a1)
  4000. val SET val-104*4
  4001.  ENDR
  4002.  sub.l #104*4*20,a1
  4003.  dbra d1,twd
  4004.  addq #4,a0
  4005.  dbra d0,tw
  4006.  
  4007.  rts
  4008.  
  4009. nowaterfull:
  4010.  bset.b #1,$bfe001
  4011.  rts
  4012.  
  4013. prot9: dc.w 0
  4014.  
  4015. TempBuffer: ds.l 100 
  4016.  
  4017. ClipTable: ds.l 30
  4018. EndOfClipPt: dc.l 0
  4019. DOUPPER: dc.w 0
  4020.  
  4021. RealTable:
  4022.  dc.l prot1-78935450
  4023.  dc.l prot2-78935450
  4024.  dc.l prot3-78935450
  4025.  dc.l prot4-78935450
  4026.  dc.l prot5-78935450
  4027.  dc.l prot6-78935450
  4028.  dc.l prot7-78935450
  4029.  dc.l prot8-78935450
  4030.  dc.l prot9-78935450
  4031.  dc.l protA-78935450
  4032.  
  4033. dothisroom
  4034.  
  4035.  move.w (a0)+,d0
  4036.  move.w d0,currzone
  4037.  move.l #ZoneBrightTable,a1
  4038.  move.l (a1,d0.w*4),d1
  4039.  tst.b DOUPPER
  4040.  bne.s .okbot
  4041.  swap d1
  4042. .okbot:
  4043.  move.w d1,ZoneBright
  4044.  
  4045. polyloop:
  4046.  move.w (a0)+,d0
  4047.  blt jumpoutofloop
  4048.  beq itsawall
  4049.  cmp.w #3,d0
  4050.  beq itsasetclip
  4051.  blt itsafloor
  4052.  cmp.w #4,d0
  4053.  beq itsanobject
  4054.  cmp.w #5,d0
  4055.  beq itsanarc
  4056.  cmp.w #6,d0
  4057.  beq itsalightbeam
  4058.  cmp.w #7,d0
  4059.  beq.s itswater
  4060.  cmp.w #9,d0
  4061.  ble itsachunkyfloor
  4062.  cmp.w #11,d0
  4063.  ble itsabumpyfloor
  4064.  cmp.w #12,d0
  4065.  beq.s itsbackdrop
  4066.  cmp.w #13,d0
  4067.  beq.s itsaseewall
  4068.  
  4069.  bra polyloop
  4070.  
  4071. itsaseewall:
  4072.  st seethru
  4073.  jsr itsawalldraw
  4074.  bra polyloop
  4075.  
  4076. itsbackdrop:
  4077.  jsr putinbackdrop
  4078.  bra polyloop
  4079.  
  4080. itswater:
  4081.  PROTHCHECK
  4082.  move.w #3,d0
  4083.  clr.b gourfloor
  4084.  move.l #FloorLine,LineToUse
  4085.  st usewater
  4086.  clr.b usebumps
  4087.  jsr itsafloordraw
  4088.  bra polyloop
  4089.  
  4090. itsanarc:
  4091.  jsr CurveDraw
  4092.  bra polyloop
  4093.  
  4094. itsanobject:
  4095.  jsr ObjDraw
  4096.  bra polyloop
  4097.  
  4098. itsalightbeam:
  4099.  jsr LightDraw
  4100.  bra polyloop
  4101.  
  4102. itsabumpyfloor:
  4103.  sub.w #9,d0
  4104.  st usebumps
  4105.  st smoothbumps
  4106.  clr.b usewater
  4107.  move.l #BumpLine,LineToUse
  4108.  jsr itsafloordraw
  4109.  bra polyloop
  4110.  
  4111. itsachunkyfloor:
  4112.  subq.w #7,d0
  4113.  st usebumps
  4114.  sub.w #12,topclip
  4115. ; add.w #10,botclip
  4116.  clr.b smoothbumps
  4117.  clr.b usewater
  4118.  move.l #BumpLine,LineToUse
  4119.  jsr itsafloordraw
  4120.  add.w #12,topclip
  4121. ; sub.w #10,botclip
  4122.  bra polyloop 
  4123.  
  4124. itsafloor:
  4125.  
  4126.  movem.l a0/d0,-(a7)
  4127.  move.l $4.w,a6
  4128.  jsr _LVOSuperState(a6)
  4129.  move.l d0,SSTACK
  4130.  movem.l (a7)+,a0/d0
  4131.  
  4132.  move.l THEFLOORLINE,LineToUse
  4133. * 1,2 = floor/roof
  4134.  clr.b usewater
  4135.  clr.b usebumps
  4136.  move.b GOURSEL,gourfloor    
  4137.  jsr itsafloordraw
  4138.  move.l a0,-(a7)
  4139.  move.l $4.w,a6
  4140.  move.l SSTACK,d0
  4141.  jsr _LVOUserState(a6)
  4142.  move.l (a7)+,a0
  4143.  bra polyloop
  4144. itsasetclip:
  4145.  bra polyloop
  4146. itsawall:
  4147.  clr.b seethru
  4148. ; move.l #stripbuffer,a1
  4149.  jsr itsawalldraw
  4150.  bra polyloop
  4151.  
  4152. jumpoutofloop:
  4153.  rts
  4154.  
  4155. GOURSEL: dc.w 0
  4156. ThisRoomToDraw: dc.l 0,0
  4157. SplitHeight: dc.l 0
  4158.  
  4159.  include "ab3:source_4000/OrderZones"
  4160.  
  4161. ReadMouse:
  4162.  move.l #$dff000,a6
  4163.  clr.l d0
  4164.  clr.l d1
  4165.  move.w $a(a6),d0
  4166.  lsr.w #8,d0
  4167.  ext.l d0
  4168.  move.w d0,d3
  4169.  move.w oldmy,d2
  4170.  sub.w d2,d0
  4171.  
  4172.  cmp.w #127,d0
  4173.  blt nonegy
  4174.  move.w #255,d1
  4175.  sub.w d0,d1
  4176.  move.w d1,d0
  4177.  neg.w d0
  4178. nonegy:
  4179.  
  4180.  cmp.w #-127,d0
  4181.  bge nonegy2
  4182.  move.w #255,d1
  4183.  add.w d0,d1
  4184.  move.w d1,d0
  4185. nonegy2:
  4186.  
  4187.  add.b d0,d2
  4188.  add.w d0,oldy2
  4189.  move.w d2,oldmy
  4190.  move.w d2,d0
  4191.  
  4192.  move.w oldy2,d0
  4193.  move.w d0,ymouse
  4194.  
  4195.  clr.l d0
  4196.  clr.l d1
  4197.  move.w $a(a6),d0
  4198.  ext.w d0
  4199.  ext.l d0
  4200.  move.w d0,d3
  4201.  move.w oldmx,d2
  4202.  sub.w d2,d0
  4203.  
  4204.  cmp.w #127,d0
  4205.  blt nonegx
  4206.  move.w #255,d1
  4207.  sub.w d0,d1
  4208.  move.w d1,d0
  4209.  neg.w d0
  4210. nonegx:
  4211.  
  4212.  cmp.w #-127,d0
  4213.  bge nonegx2
  4214.  move.w #255,d1
  4215.  add.w d0,d1
  4216.  move.w d1,d0
  4217. nonegx2:
  4218.  
  4219.  add.b d0,d2
  4220.  move.w d0,d1
  4221.  move.w d2,oldmx
  4222.  
  4223.  move.w #$0,$dff034
  4224.  
  4225.  add.w d0,oldx2
  4226.  move.w oldx2,d0
  4227.  and.w #2047,d0
  4228.  move.w d0,oldx2
  4229.  
  4230.  asl.w #2,d0
  4231.  sub.w prevx,d0
  4232.  add.w d0,prevx
  4233.  add.w d0,angpos
  4234.  move.w #0,lrs
  4235.  rts
  4236.  
  4237. noturn:
  4238.  
  4239. ; got to move lr instead. 
  4240.  
  4241. ; d1 = speed moved l/r
  4242.  
  4243.  move.w d1,lrs
  4244.  
  4245.  rts
  4246.  
  4247. lrs: dc.w 0
  4248. prevx: dc.w 0
  4249.  
  4250. angpos: dc.w 0
  4251. mang: dc.w 0
  4252. oldymouse: dc.w 0
  4253. xmouse: dc.w 0
  4254. ymouse: dc.w 0
  4255. oldx2: dc.w 0
  4256. oldmx: dc.w 0
  4257. oldmy: dc.w 0
  4258. oldy2: dc.w 0
  4259.  
  4260. RotateLevelPts:
  4261.  
  4262.  move.w sinval,d6
  4263.  swap d6
  4264.  move.w cosval,d6
  4265.  
  4266.  move.l PointsToRotatePtr,a0
  4267.  move.l Points,a3
  4268.  move.l #Rotated,a1
  4269.  move.l #OnScreen,a2
  4270.  move.w xoff,d4
  4271.  move.w zoff,d5
  4272.  
  4273. ; move.w #$c40,$dff106
  4274. ; move.w #$f00,$dff180
  4275.  
  4276. pointrotlop:
  4277.  move.w (a0)+,d7
  4278.  blt.s outofpointrot
  4279.  
  4280.  move.w (a3,d7*4),d0
  4281.  sub.w d4,d0
  4282.  move.w d0,d2
  4283.  move.w 2(a3,d7*4),d1
  4284.  sub.w d5,d1
  4285.  muls d6,d2
  4286.  swap d6
  4287.  move.w d1,d3
  4288.  muls d6,d3
  4289.  sub.l d3,d2
  4290.  add.l d2,d2
  4291.  swap d2
  4292.  ext.l d2
  4293.  asl.l #7,d2
  4294.  add.l xwobble,d2
  4295.  move.l d2,(a1,d7*8)
  4296.  
  4297.  muls d6,d0
  4298.  swap d6
  4299.  muls d6,d1
  4300.  add.l d0,d1
  4301.  asl.l #2,d1
  4302.  swap d1
  4303.  move.l d1,4(a1,d7*8)
  4304.  
  4305.  tst.w d1
  4306.  bgt.s ptnotbehind
  4307.  tst.w d2
  4308.  bgt.s onrightsomewhere
  4309.  move.w #0,d2
  4310.  bra putin
  4311. onrightsomewhere:
  4312.  move.w #96,d2
  4313.  bra putin
  4314. ptnotbehind:
  4315.  
  4316.  divs d1,d2
  4317.  add.w #47,d2
  4318. putin:
  4319.  move.w d2,(a2,d7*2)
  4320.  
  4321.  bra pointrotlop
  4322. outofpointrot:
  4323.  
  4324. ; move.w #$c40,$dff106
  4325. ; move.w #$ff0,$dff180
  4326.  
  4327.  rts
  4328.  
  4329. PLR1_ObjDists
  4330.  ds.w 250
  4331. PLR2_ObjDists
  4332.  ds.w 250
  4333.  
  4334. CalcPLR1InLine:
  4335.  
  4336.  move.w PLR1_sinval,d5
  4337.  move.w PLR1_cosval,d6
  4338.  move.l ObjectData,a4
  4339.  move.l ObjectPoints,a0
  4340.  move.w NumObjectPoints,d7
  4341.  move.l #PLR1_ObsInLine,a2
  4342.  move.l #PLR1_ObjDists,a3
  4343.  
  4344. .objpointrotlop:
  4345.  
  4346.  move.w (a0),d0
  4347.  sub.w PLR1_xoff,d0
  4348.  move.w 4(a0),d1
  4349.  addq #8,a0
  4350.  
  4351.  tst.w 12(a4)
  4352.  blt .noworkout
  4353.  
  4354.  moveq #0,d2
  4355.  move.b 16(a4),d2
  4356.  move.l #ColBoxTable,a6
  4357.  lea (a6,d2.w*8),a6
  4358.  
  4359.  sub.w PLR1_zoff,d1
  4360.  move.w d0,d2
  4361.  muls d6,d2
  4362.  move.w d1,d3
  4363.  muls d5,d3
  4364.  sub.l d3,d2
  4365.  add.l d2,d2
  4366.  
  4367.  bgt.s .okh
  4368.  neg.l d2
  4369. .okh:
  4370.  swap d2
  4371.  
  4372.  muls d5,d0
  4373.  muls d6,d1
  4374.  add.l d0,d1
  4375.  asl.l #2,d1
  4376.  swap d1
  4377.  moveq #0,d3
  4378.  
  4379.  tst.w d1
  4380.  ble.s .notinline
  4381.  asr.w #1,d2
  4382.  cmp.w (a6),d2
  4383.  bgt.s .notinline
  4384.  
  4385.  st d3
  4386. .notinline
  4387.  move.b d3,(a2)+
  4388.  
  4389.  move.w d1,(a3)+
  4390.  
  4391.  add.w #64,a4
  4392.  dbra d7,.objpointrotlop
  4393.  
  4394.  rts
  4395.  
  4396. .noworkout:
  4397.  move.b #0,(a2)+
  4398.  move.w #0,(a3)+
  4399.  add.w #64,a4
  4400.  dbra d7,.objpointrotlop
  4401.  rts
  4402.  
  4403.  
  4404. CalcPLR2InLine:
  4405.  
  4406.  move.w PLR2_sinval,d5
  4407.  move.w PLR2_cosval,d6
  4408.  move.l ObjectData,a4
  4409.  move.l ObjectPoints,a0
  4410.  move.w NumObjectPoints,d7
  4411.  move.l #PLR2_ObsInLine,a2
  4412.  move.l #PLR2_ObjDists,a3
  4413.  
  4414. .objpointrotlop:
  4415.  
  4416.  move.w (a0),d0
  4417.  sub.w PLR2_xoff,d0
  4418.  move.w 4(a0),d1
  4419.  addq #8,a0
  4420.  
  4421.  tst.w 12(a4)
  4422.  blt .noworkout
  4423.  
  4424.  moveq #0,d2
  4425.  move.b 16(a4),d2
  4426.  move.l #ColBoxTable,a6
  4427.  lea (a6,d2.w*8),a6
  4428.  
  4429.  sub.w PLR2_zoff,d1
  4430.  move.w d0,d2
  4431.  muls d6,d2
  4432.  move.w d1,d3
  4433.  muls d5,d3
  4434.  sub.l d3,d2
  4435.  add.l d2,d2
  4436.  
  4437.  bgt.s .okh
  4438.  neg.l d2
  4439. .okh:
  4440.  swap d2
  4441.  
  4442.  muls d5,d0
  4443.  muls d6,d1
  4444.  add.l d0,d1
  4445.  asl.l #2,d1
  4446.  swap d1
  4447.  moveq #0,d3
  4448.  
  4449.  tst.w d1
  4450.  ble.s .notinline
  4451.  asr.w #1,d2
  4452.  cmp.w (a6),d2
  4453.  bgt.s .notinline
  4454.  
  4455.  st d3
  4456. .notinline
  4457.  move.b d3,(a2)+
  4458.  
  4459.  move.w d1,(a3)+
  4460.  
  4461.  add.w #64,a4
  4462.  dbra d7,.objpointrotlop
  4463.  
  4464.  rts
  4465.  
  4466. .noworkout:
  4467.  move.w #0,(a3)+
  4468.  move.b #0,(a2)+
  4469.  add.w #64,a4
  4470.  dbra d7,.objpointrotlop
  4471.  rts
  4472.  
  4473.  
  4474. RotateObjectPts:
  4475.  
  4476.  move.w sinval,d5
  4477.  move.w cosval,d6
  4478.  
  4479.  move.l ObjectData,a4
  4480.  move.l ObjectPoints,a0
  4481.  move.w NumObjectPoints,d7
  4482.  move.l #ObjRotated,a1
  4483.  
  4484. .objpointrotlop:
  4485.  
  4486.  move.w (a0),d0
  4487.  sub.w xoff,d0
  4488.  move.w 4(a0),d1
  4489.  addq #8,a0
  4490.  
  4491.  tst.w 12(a4)
  4492.  blt .noworkout
  4493.  
  4494.  sub.w zoff,d1
  4495.  move.w d0,d2
  4496.  muls d6,d2
  4497.  move.w d1,d3
  4498.  muls d5,d3
  4499.  sub.l d3,d2
  4500.  
  4501.  
  4502.  add.l d2,d2
  4503.  swap d2
  4504.  move.w d2,(a1)+
  4505.  
  4506.  muls d5,d0
  4507.  muls d6,d1
  4508.  add.l d0,d1
  4509.  asl.l #2,d1
  4510.  swap d1
  4511.  moveq #0,d3
  4512.  
  4513.  move.w d1,(a1)+
  4514.  ext.l d2
  4515.  asl.l #7,d2
  4516.  add.l xwobble,d2
  4517.  move.l d2,(a1)+
  4518.  sub.l xwobble,d2
  4519.  
  4520.  add.w #64,a4
  4521.  dbra d7,.objpointrotlop
  4522.  
  4523.  rts
  4524.  
  4525. .noworkout:
  4526.   move.l #0,(a1)+
  4527.   move.l #0,(a1)+
  4528.   add.w #64,a4
  4529.   dbra d7,.objpointrotlop
  4530.   rts
  4531.  
  4532. LightDraw:
  4533.  
  4534.  move.w (a0)+,d0
  4535.  move.w (a0)+,d1
  4536.  move.l #Rotated,a1
  4537.  move.w 6(a1,d0.w*8),d2
  4538.  ble.s oneendbehind
  4539.  move.w 6(a1,d1.w*8),d3
  4540.  bgt.s bothendsinfront
  4541.  
  4542. oneendbehind:
  4543.  rts
  4544. bothendsinfront:
  4545.  
  4546.  move.l #OnScreen,a2
  4547.  move.w (a2,d0.w*2),d0
  4548.  bge.s okleftend
  4549.  moveq #0,d0
  4550. okleftend:
  4551.  move.w (a2,d1.w*2),d1
  4552.  bgt.s somevis
  4553.  rts
  4554. somevis:
  4555.  cmp.w #95,d0
  4556.  ble.s somevis2
  4557.  rts
  4558. somevis2:
  4559.  cmp.w #95,d1
  4560.  ble.s okrightend
  4561.  move.w #95,d1
  4562. okrightend:
  4563.  
  4564.  sub.w d0,d1
  4565.  blt.s wrongbloodywayround
  4566.  move.l #brightentab,a4
  4567.  move.l #objintocop,a1
  4568.  lea (a1,d0.w*2),a1
  4569.  
  4570.  move.l frompt,a3
  4571.  move.w #104*4,d6
  4572.  move.w #79,d2
  4573. lacross:
  4574.  move.w d2,d3
  4575.  move.l a3,a2
  4576.  adda.w (a1)+,a2
  4577. ldown:
  4578.  add.w d6,a2
  4579.  move.w (a2),d7
  4580.  move.w (a4,d7.w*2),(a2)
  4581.  dbra d3,ldown
  4582.  dbra d1,lacross
  4583.  
  4584. wrongbloodywayround:
  4585.  
  4586.  rts
  4587.  
  4588. FaceToPlace: dc.w 0
  4589.  
  4590. Cheese:
  4591.  dc.w 4,15
  4592.  
  4593. FacesList:
  4594.  dc.w 0,4*4
  4595.  dc.w 1,2*4
  4596.  dc.w 0,2*4
  4597.  dc.w 2,2*4
  4598.  dc.w 0,2*4
  4599.  dc.w 1,3*4
  4600.  dc.w 0,2*4
  4601.  dc.w 2,3*4
  4602.  dc.w 0,5*4
  4603.  dc.w 1,2*4
  4604.  dc.w 0,2*4
  4605.  dc.w 2,2*4
  4606.  dc.w 0,2*4
  4607.  dc.w 1,2*4
  4608.  dc.w 0,2*4
  4609.  dc.w 2,3*4
  4610.  dc.w 0,1*4
  4611.  dc.w 1,3*4
  4612.  dc.w 0,1*4
  4613.  dc.w 2,3*4
  4614.  dc.w 0,1*4
  4615.  
  4616. EndOfFacesList:
  4617.  
  4618. FacesPtr:
  4619.  dc.l FacesList
  4620. FacesCounter:
  4621.  dc.w 0
  4622. Expression:
  4623.  dc.w 0
  4624.  
  4625. PlaceFace:
  4626.  
  4627.  move.w FacesCounter,d0
  4628.  subq #1,d0
  4629.  bgt.s NoNewFace
  4630.  
  4631.  move.l FacesPtr,a0
  4632.  
  4633.  move.w 2(a0),d0
  4634.  move.w (a0),Expression
  4635.  addq #4,a0
  4636.  cmp.l #EndOfFacesList,a0
  4637.  blt.s NotFirstFace
  4638.  
  4639.  move.l #FacesList,a0
  4640.  
  4641. NotFirstFace
  4642.  move.l a0,FacesPtr
  4643.  
  4644. NoNewFace:
  4645.  
  4646.  move.w d0,FacesCounter
  4647.  
  4648.  Move.w FaceToPlace,d0
  4649.  muls #5,d0
  4650.  add.w Expression,d0
  4651.  move.l #FacePlace+10,a0
  4652.  move.l #Faces,a1
  4653.  muls #(4*32*5),d0
  4654.  adda.w d0,a1
  4655.  move.w #4,d0
  4656.  move.w #24,d1
  4657.  
  4658.  move.w #4,d3
  4659. bitplaneloop:
  4660.  move.w #31,d2
  4661. PlaceFaceToPlaceInFacePlaceLoop:
  4662.  move.l (a1),(a0)
  4663.  adda.w d0,a1
  4664.  adda.w d1,a0
  4665.  dbra d2,PlaceFaceToPlaceInFacePlaceLoop
  4666.  dbra d3,bitplaneloop
  4667.  
  4668.  rts
  4669.  
  4670. Energy:
  4671.  dc.w 191
  4672. OldEnergy:
  4673.  dc.w 191
  4674. Ammo: dc.w 63
  4675. OldAmmo: dc.w 63
  4676.  
  4677. FullEnergy:
  4678.  move.w #127,Energy
  4679.  move.w #127,OldEnergy
  4680.  move.l #health,a0
  4681.  move.l #borders,a1
  4682.  add.l #25*8*2+6,a1
  4683.  lea 2592(a1),a2
  4684.  move.w #127,d0
  4685. PutInFull:
  4686.  move.b (a0)+,(a1)
  4687.  move.b (a0)+,8(a1)
  4688.  add.w #16,a1
  4689.  move.b (a0)+,(a2)
  4690.  move.b (a0)+,8(a2)
  4691.  add.w #16,a2
  4692.  dbra d0,PutInFull
  4693.  
  4694.  rts
  4695.  
  4696. EnergyBar:
  4697.  
  4698.  move.w Energy,d0
  4699.  bgt.s .noeneg
  4700.  move.w #0,d0
  4701. .noeneg:
  4702.  move.w d0,Energy
  4703.  
  4704.  cmp.w OldEnergy,d0
  4705.  bne.s gottochange
  4706.  
  4707. NoChange
  4708.  rts
  4709.  
  4710. gottochange:
  4711.   
  4712.  blt LessEnergy
  4713.  cmp.w #127,Energy
  4714.  blt.s NotMax
  4715.  move.w #127,Energy
  4716. NotMax:
  4717.  
  4718.  move.w Energy,d0
  4719.  move.w OldEnergy,d2
  4720.  sub.w d0,d2
  4721.  beq.s NoChange    
  4722.  neg.w d2
  4723.  
  4724.  move.w #127,d3
  4725.  sub.w d0,d3
  4726.  
  4727.  move.l #health,a0
  4728.  lea (a0,d3.w*4),a0
  4729.  move.l #borders+25*16+6,a1
  4730.  lsl.w #4,d3
  4731.  add.w d3,a1
  4732.  lea 2592(a1),a2
  4733.  
  4734. EnergyRise:
  4735.  move.b (a0)+,(a1)
  4736.  move.b (a0)+,8(a1)
  4737.  add.w #16,a1
  4738.  move.b (a0)+,(a2)
  4739.  move.b (a0)+,8(a2)
  4740.  add.w #16,a2
  4741.  subq #1,d2
  4742.  bgt.s EnergyRise
  4743.  
  4744.  move.w Energy,OldEnergy
  4745.  
  4746.  rts 
  4747.  
  4748. LessEnergy: 
  4749.  move.w OldEnergy,d2
  4750.  sub.w d0,d2
  4751.  
  4752.  move.w #127,d3
  4753.  sub.w OldEnergy,d3
  4754.  
  4755.  move.l #borders+25*16+6,a1
  4756.  asl.w #4,d3
  4757.  add.w d3,a1
  4758.  lea 2592(a1),a2
  4759.  
  4760. EnergyDrain:
  4761.  move.b #0,(a1)
  4762.  move.b #0,8(a1)
  4763.  move.b #0,(a2)
  4764.  move.b #0,8(a2)
  4765.  add.w #16,a1
  4766.  add.w #16,a2
  4767.  subq #1,d2
  4768.  bgt.s EnergyDrain
  4769.  
  4770.  move.w Energy,OldEnergy
  4771.  
  4772.  rts 
  4773.  
  4774. AmmoBar:
  4775.  
  4776.  move.w Ammo,d0
  4777.  cmp.w OldAmmo,d0
  4778.  bne.s .gottochange
  4779.  
  4780. .NoChange
  4781.  rts
  4782.  
  4783. .gottochange:
  4784.   
  4785.  blt LessAmmo
  4786.  cmp.w #63,Ammo
  4787.  blt.s .NotMax
  4788.  move.w #63,Ammo
  4789. .NotMax:
  4790.  
  4791.  move.w Ammo,d0
  4792.  move.w OldAmmo,d2
  4793.  sub.w d0,d2
  4794.  beq.s .NoChange
  4795.  neg.w d2
  4796.  
  4797.  move.w #63,d3
  4798.  sub.w d0,d3
  4799.  
  4800.  move.l #Ammunition,a0
  4801.  lea (a0,d3.w*8),a0
  4802.  move.l #borders+5184+25*16+1,a1
  4803.  lsl.w #5,d3
  4804.  add.w d3,a1
  4805.  lea 2592(a1),a2
  4806.  
  4807. AmmoRise:
  4808.  move.b (a0)+,(a1)
  4809.  move.b (a0)+,8(a1)
  4810.  add.w #16,a1
  4811.  move.b (a0)+,(a2)
  4812.  move.b (a0)+,8(a2)
  4813.  add.w #16,a2
  4814.  move.b (a0)+,(a1)
  4815.  move.b (a0)+,8(a1)
  4816.  add.w #16,a1
  4817.  move.b (a0)+,(a2)
  4818.  move.b (a0)+,8(a2)
  4819.  add.w #16,a2
  4820.  subq #1,d2
  4821.  bgt.s AmmoRise
  4822.  
  4823.  move.w Ammo,OldAmmo
  4824.  
  4825.  rts 
  4826.  
  4827.  
  4828. LessAmmo: 
  4829.  move.w OldAmmo,d2
  4830.  sub.w d0,d2
  4831.  
  4832.  move.w #63,d3
  4833.  sub.w OldAmmo,d3
  4834.  
  4835.  move.l #borders++5184+25*16+1,a1
  4836.  asl.w #5,d3
  4837.  add.w d3,a1
  4838.  lea 2592(a1),a2
  4839.  
  4840. AmmoDrain:
  4841.  move.b #0,(a1)
  4842.  move.b #0,8(a1)
  4843.  move.b #0,(a2)
  4844.  move.b #0,8(a2)
  4845.  add.w #16,a1
  4846.  add.w #16,a2
  4847.  move.b #0,(a1)
  4848.  move.b #0,8(a1)
  4849.  move.b #0,(a2)
  4850.  move.b #0,8(a2)
  4851.  add.w #16,a1
  4852.  add.w #16,a2
  4853.  subq #1,d2
  4854.  bgt.s AmmoDrain
  4855.  
  4856.  move.w Ammo,OldAmmo
  4857.  
  4858.  rts 
  4859.  
  4860. nulop:
  4861.  move.w #$0010,$dff000+intreq
  4862.  rte
  4863.  
  4864. doanything: dc.w 0
  4865.  
  4866. end:
  4867.      _break #0
  4868.     
  4869.  
  4870.  clr.b dosounds
  4871.  clr.b doanything
  4872.  
  4873.  move.w PLR1_energy,Energy
  4874.  cmp.b #'s',mors
  4875.  bne.s .notsl
  4876.  move.w PLR2_energy,Energy
  4877. .notsl:
  4878.  
  4879.  bsr EnergyBar
  4880.  
  4881.  move.l drawpt,d0
  4882.  move.l olddrawpt,drawpt
  4883.  move.l d0,olddrawpt
  4884.  move.l d0,$dff084
  4885.  
  4886.  
  4887.  cmp.b #'b',Prefsfile+3
  4888.  bne.s .noback
  4889.  jsr mt_end
  4890. .noback
  4891.  tst.w Energy
  4892.  bgt.s wevewon
  4893.  
  4894.  move.l #gameover,mt_data
  4895.  st UseAllChannels
  4896.  clr.b reachedend
  4897.  jsr mt_init
  4898. playgameover:
  4899.  move.l #$dff000,a6
  4900. waitfortop2:
  4901.  
  4902.     
  4903.  btst.b #0,intreqrl(a6)
  4904.  beq waitfortop2
  4905.  move.w #$1,intreq(a6)
  4906.  
  4907.     
  4908.  jsr mt_music
  4909.  
  4910.  
  4911.     
  4912.  tst.b reachedend
  4913.  beq.s playgameover
  4914.  
  4915.  bra wevelost
  4916.  
  4917.  
  4918. wevewon:
  4919.  
  4920.  cmp.b #'n',mors
  4921.  bne.s .nonextlev
  4922.  add.w #1,MAXLEVEL
  4923.  st FINISHEDLEVEL
  4924. .nonextlev:
  4925.  
  4926.  move.l #welldone,mt_data
  4927.  st UseAllChannels
  4928.  clr.b reachedend
  4929.  jsr mt_init
  4930. playwelldone:
  4931.  move.l #$dff000,a6
  4932. waitfortop3:
  4933.  btst.b #0,intreqrl(a6)
  4934.  beq waitfortop3
  4935.  move.w #$1,intreq(a6)
  4936.  
  4937.  jsr mt_music
  4938.  
  4939.  tst.b reachedend
  4940.  beq.s playwelldone
  4941.  
  4942. wevelost:
  4943.  
  4944.  PROTICHECK a0
  4945.  
  4946.  jmp closeeverything 
  4947.  
  4948. endnomusic
  4949.  clr.b doanything
  4950.  cmp.b #'b',Prefsfile+3
  4951.  bne.s .noback
  4952.  jsr mt_end
  4953. .noback
  4954. *******************************
  4955. ; cmp.b #'n',mors
  4956. ; bne.s .nonextlev
  4957. ; cmp.w #15,MAXLEVEL
  4958. ; bge.s .nonextlev
  4959. ; add.w #1,MAXLEVEL
  4960. ; st FINISHEDLEVEL
  4961. ;.nonextlev:
  4962. ******************************
  4963.  
  4964.  jmp closeeverything
  4965.  
  4966. do32:
  4967.  move.w #31,d7
  4968.  move.w #$180,d1
  4969. across:
  4970.  move.w d1,(a1)+
  4971.  move.w d1,(a3)+
  4972.  move.w #0,(a1)+ 
  4973.  move.w #0,(a3)+
  4974.  add.w #2,d1
  4975.  dbra d7,across
  4976.  rts
  4977.  
  4978. string:
  4979.     dc.b    'credits',0
  4980.  
  4981. ENDGAMESCROLL:
  4982.  
  4983.     move.l    4.w,a6
  4984.     move.l    #string,d1
  4985.     moveq    #0,d2
  4986.     moveq    #0,d3
  4987.     jsr    _LVOExecute(a6)
  4988.  
  4989. ; include "endscroll.s"
  4990.  
  4991. ***********************************
  4992.  include "ab3:source_4000/CD32JOY"
  4993.  
  4994.  
  4995.  
  4996. *************************************
  4997. * Set left and right clip values
  4998. *************************************
  4999.  
  5000.  
  5001.  
  5002. NEWsetlclip:
  5003.  move.l #OnScreen,a1
  5004.  move.l #Rotated,a2
  5005.  move.l CONNECT_TABLE,a3
  5006.  
  5007.  move.w (a0),d0
  5008.  bge.s .notignoreleft
  5009.  
  5010. ; move.l #0,(a6)
  5011.  
  5012.  bra .leftnotoktoclip
  5013. .notignoreleft:
  5014.  
  5015.  move.w 6(a2,d0*8),d3    ; left z val
  5016.  bgt.s .leftclipinfront
  5017.  addq #2,a0
  5018.  rts
  5019.  
  5020.  tst.w 6(a2,d0*8)
  5021.  bgt.s .leftnotoktoclip
  5022. .ignoreboth:
  5023. ; move.l #0,(a6)
  5024. ; move.l #96*65536,4(a6)
  5025.  move.w #0,leftclip
  5026.  move.w #96,rightclip
  5027.  addq #8,a6
  5028.  addq #2,a0
  5029.  rts
  5030.  
  5031. .leftclipinfront:
  5032.  move.w (a1,d0*2),d1    ; left x on screen
  5033.  move.w (a0),d2
  5034.  move.w 2(a3,d2.w*4),d2
  5035.  move.w (a1,d2.w*2),d2
  5036.  cmp.w d1,d2
  5037.  bgt.s .leftnotoktoclip
  5038.  
  5039. ; move.w d1,(a6)
  5040. ; move.w d3,2(a6)
  5041.  cmp.w leftclip,d1
  5042.  ble.s .leftnotoktoclip
  5043.  move.w d1,leftclip
  5044. .leftnotoktoclip:
  5045.  
  5046.  addq #2,a0
  5047.  
  5048.  rts
  5049.  
  5050. NEWsetrclip
  5051.  move.l #OnScreen,a1
  5052.  move.l #Rotated,a2
  5053.  move.l CONNECT_TABLE,a3
  5054.  move.w (a0),d0
  5055.  bge.s .notignoreright
  5056. ; move.w #96,4(a6)
  5057. ; move.w #0,6(a6)
  5058.  move.w #0,d4
  5059.  bra .rightnotoktoclip
  5060. .notignoreright:
  5061.  move.w 6(a2,d0*8),d4    ; right z val
  5062.  bgt.s .rightclipinfront
  5063. ; move.w #96,4(a6)
  5064. ; move.w #0,6(a6)
  5065.  bra.s .rightnotoktoclip
  5066.  
  5067. .rightclipinfront:
  5068.  move.w (a1,d0*2),d1    ; right x on screen
  5069.  move.w (a0),d2
  5070.  move.w (a3,d2.w*4),d2
  5071.  move.w (a1,d2.w*2),d2
  5072.  cmp.w d1,d2
  5073.  blt.s .rightnotoktoclip
  5074. ; move.w d1,4(a6)
  5075. ; move.w d4,6(a6)
  5076.  
  5077.  cmp.w rightclip,d1
  5078.  bge.s .rightnotoktoclip
  5079.  addq #1,d1
  5080.  move.w d1,rightclip
  5081. .rightnotoktoclip:
  5082.  addq #8,a6
  5083.  addq #2,a0
  5084.  rts
  5085.  
  5086. FIRSTsetlrclip:
  5087.  move.l #OnScreen,a1
  5088.  move.l #Rotated,a2
  5089.  
  5090.  move.w (a0)+,d0
  5091.  bge.s .notignoreleft
  5092.  bra .leftnotoktoclip
  5093. .notignoreleft:
  5094.  
  5095.  move.w 6(a2,d0*8),d3    ; left z val
  5096.  bgt.s .leftclipinfront
  5097.  
  5098.  move.w (a0),d0
  5099.  blt.s .ignoreboth
  5100.  tst.w 6(a2,d0*8)
  5101.  bgt.s .leftnotoktoclip
  5102. .ignoreboth
  5103.  move.w #96,rightclip
  5104.  move.w #0,leftclip
  5105.  addq #2,a0
  5106.  rts
  5107.  
  5108. .leftclipinfront:
  5109.  move.w (a1,d0*2),d1    ; left x on screen
  5110.  cmp.w leftclip,d1
  5111.  ble.s .leftnotoktoclip
  5112.  move.w d1,leftclip
  5113. .leftnotoktoclip:
  5114.  
  5115.  move.w (a0)+,d0
  5116.  bge.s .notignoreright
  5117.  move.w #0,d4
  5118.  bra .rightnotoktoclip
  5119. .notignoreright:
  5120.  move.w 6(a2,d0*8),d4    ; right z val
  5121.  ble.s .rightnotoktoclip
  5122.  
  5123. .rightclipinfront:
  5124.  move.w (a1,d0*2),d1    ; right x on screen
  5125.  addq #1,d1
  5126.  cmp.w rightclip,d1
  5127.  bge.s .rightnotoktoclip
  5128.  move.w d1,rightclip
  5129. .rightnotoktoclip:
  5130.  
  5131. ; move.w leftclip,d0
  5132. ; move.w rightclip,d1
  5133. ; cmp.w d0,d1
  5134. ; bge.s .noswap
  5135. ; move.w #96,rightclip
  5136. ; move.w #0,leftclip
  5137. ;.noswap:
  5138.  
  5139.  rts
  5140.  
  5141.  
  5142. leftclip2: dc.w 0
  5143. rightclip2: dc.w 0
  5144. ZoneBright: dc.w 0
  5145.  
  5146. npolys: dc.w 0
  5147.  
  5148. PLR1_fire: dc.b 0
  5149. PLR2_fire: dc.b 0
  5150.  
  5151. *****************************************************
  5152.  
  5153.  
  5154. pastdata:
  5155. ***********************************
  5156. * This routine animates brightnesses.
  5157.  
  5158.  
  5159. liftpt: dc.l liftanimtab
  5160.  
  5161. brightpt:
  5162.  dc.l brightanimtab
  5163.  
  5164.  
  5165. liftanim:
  5166.  rts
  5167.  
  5168. ******************************
  5169.  include "ab3:source_4000/ObjectMove"
  5170.  include "ab3:source_4000/Anims"
  5171. ******************************
  5172. startpass:
  5173. ; include "ab3:source_4000/password_reloc.s"
  5174. endpass:
  5175.  
  5176. rotanimpt: dc.w 0
  5177. xradd: dc.w 5
  5178. yradd: dc.w 8
  5179. xrpos: dc.w 320
  5180. yrpos: dc.w 320
  5181.  
  5182. rotanim:
  5183.  rts
  5184.  
  5185. option:
  5186.  dc.l 0,0
  5187.  
  5188. ********** WALL STUFF *******************************
  5189.  
  5190.  include "AB3:source_4000/wallroutine3.chipmem"
  5191.  
  5192. *****************************************************
  5193.  
  5194. ******************************************
  5195. * floor polygon
  5196.  
  5197. numsidestd: dc.w 0
  5198. bottomline: dc.w 0
  5199.  
  5200. checkforwater:
  5201.  tst.b usewater
  5202.  beq.s .notwater
  5203.  
  5204.  move.l Roompt,a1
  5205.  move.w (a1),d7
  5206.  cmp.w currzone,d7
  5207.  bne.s .notwater
  5208.  
  5209.  move.b #$f,fillscrnwater
  5210.  
  5211. .notwater:
  5212.  move.w (a0)+,d6    ; sides-1
  5213.  add.w d6,d6
  5214.  add.w d6,a0
  5215.  add.w #4+6,a0
  5216.  rts
  5217.  
  5218.  rts
  5219.  
  5220. NewCornerBuff:
  5221.  ds.l 100
  5222. CLRNOFLOOR: dc.w 0
  5223.  
  5224. itsafloordraw:
  5225.  
  5226. * If D0 =1 then its a floor otherwise (=2) it's
  5227. * a roof.
  5228.  
  5229.  move.w #0,above
  5230.  move.w (a0)+,d6    ; ypos of poly
  5231.  
  5232.  move.w d6,d7
  5233.  ext.l d7
  5234.  asl.l #6,d7
  5235.  cmp.l TOPOFROOM,d7
  5236.  blt checkforwater
  5237.  cmp.l BOTOFROOM,d7
  5238.  bgt.s dontdrawreturn
  5239.  
  5240.  move.w leftclip(pc),d7
  5241.  cmp.w rightclip(pc),d7
  5242.  bge.s dontdrawreturn
  5243.  
  5244.  move.w botclip,d7
  5245.  sub.w #40,d7
  5246.  ble.s dontdrawreturn
  5247.  sub.w flooryoff,d6
  5248.  bgt.s below
  5249.  blt.s aboveplayer
  5250.  
  5251.  tst.b usewater
  5252.  beq.s .notwater
  5253.  
  5254.  move.l Roompt,a1
  5255.  move.w (a1),d7
  5256.  cmp.w currzone,d7
  5257.  
  5258.  bne.s .notwater
  5259.  
  5260.  st fillscrnwater
  5261.  
  5262. .notwater:
  5263.  
  5264.  
  5265. dontdrawreturn:
  5266.  move.w (a0)+,d6    ; sides-1
  5267.  add.w d6,d6
  5268.  add.w d6,a0
  5269.  add.w #4+6,a0
  5270.  rts
  5271. aboveplayer:
  5272.  
  5273.  tst.b usewater
  5274.  beq.s .notwater
  5275.  
  5276.  move.l Roompt,a1
  5277.  move.w (a1),d7
  5278.  cmp.w currzone,d7
  5279.  bne.s .notwater
  5280.  
  5281.  move.b #$f,fillscrnwater
  5282.  
  5283. .notwater:
  5284.  
  5285.  btst #1,d0
  5286.  beq.s dontdrawreturn
  5287.  move.w #40,d7
  5288.  sub.w topclip,d7 
  5289.  ble.s dontdrawreturn
  5290.  move.w #1,d0
  5291.  move.w d0,above
  5292.  neg.w d6
  5293. below:
  5294.  btst #0,d0
  5295.  beq.s dontdrawreturn
  5296.  move.w d6,distaddr
  5297.  muls #64,d6
  5298.  move.l d6,ypos
  5299.  divs d7,d6        ; zpos of bottom
  5300.             ; visible line
  5301.  move.w d6,minz
  5302.  move.w d7,bottomline
  5303.  
  5304. ; Go round each point finding out
  5305. ; if it should be visible or not.
  5306.  
  5307.  move.l a0,-(a7)
  5308.  
  5309.  move.w (a0)+,d7    ; number of sides
  5310.  move.l #Rotated,a1
  5311.  move.l #OnScreen,a2
  5312.  move.l #NewCornerBuff,a3
  5313.  moveq #0,d4
  5314.  moveq #0,d5
  5315.  moveq #0,d6
  5316.  clr.b anyclipping
  5317.  
  5318. cornerprocessloop:
  5319.  
  5320.  move.w (a0)+,d0
  5321.  move.w 6(a1,d0.w*8),d1
  5322.  ble  .canttell
  5323.  
  5324.  move.w (a2,d0.w*2),d3
  5325.  cmp.w leftclip,d3
  5326.  bgt.s .nol
  5327.  st d4
  5328.  st anyclipping
  5329.  bra.s .nos
  5330. .nol:
  5331.  cmp.w rightclip,d3
  5332.  blt.s .nor
  5333.  st d6
  5334.  st anyclipping
  5335.  bra.s .nos
  5336. .nor:
  5337.  st d5
  5338. .nos:
  5339.  bra .cantell
  5340.  
  5341. .canttell:
  5342.  st d5
  5343.  st anyclipping
  5344.  
  5345. .cantell:
  5346.  
  5347.  
  5348.  dbra d7,cornerprocessloop
  5349.  
  5350.  move.l (a7)+,a0
  5351.  tst.b d5
  5352.  bne.s somefloortodraw
  5353.  eor.b d4,d6
  5354.  bne dontdrawreturn
  5355.  
  5356. somefloortodraw:
  5357.  
  5358.  tst.b gourfloor
  5359.  bne goursides
  5360.  
  5361.  move.w #80,top
  5362.  move.w #-1,bottom
  5363.  move.w #0,drawit
  5364.  move.l #Rotated,a1
  5365.  move.l #OnScreen,a2
  5366.  move.w (a0)+,d7    ; no of sides
  5367. sideloop:
  5368.  move.w minz,d6
  5369.  move.w (a0)+,d1
  5370.  move.w (a0),d3
  5371.  move.w 6(a1,d1*8),d4    ;first z
  5372.  cmp.w d6,d4
  5373.  bgt firstinfront
  5374.  move.w 6(a1,d3*8),d5    ; sec z
  5375.  cmp.w d6,d5
  5376.  ble bothbehind
  5377. ** line must be on left and partially behind.
  5378.  sub.w d5,d4
  5379.  move.l (a1,d1*8),d0
  5380.  sub.l (a1,d3*8),d0
  5381.  asr.l #7,d0
  5382.  sub.w d5,d6
  5383.  muls d6,d0    ; new x coord
  5384.  divs d4,d0
  5385.  ext.l d0
  5386.  asl.l #7,d0
  5387.  
  5388.  add.l (a1,d3*8),d0
  5389.  move.w minz,d4
  5390.  move.w (a2,d3*2),d2
  5391.  divs d4,d0
  5392.  add.w #47,d0
  5393.  move.l ypos,d3
  5394.  divs d5,d3
  5395.  move.w bottomline,d1 
  5396.  bra lineclipped
  5397.  
  5398. firstinfront:
  5399.  move.w 6(a1,d3*8),d5    ; sec z
  5400.  cmp.w d6,d5
  5401.  bgt bothinfront
  5402. ** line must be on right and partially behind.
  5403.  sub.w d4,d5    ; dz
  5404.  move.l (a1,d3*8),d2
  5405.  sub.l (a1,d1*8),d2    ; dx
  5406.  sub.w d4,d6
  5407.  asr.l #7,d2
  5408.  muls d6,d2    ; new x coord
  5409.  divs d5,d2
  5410.  ext.l d2
  5411.  asl.l #7,d2
  5412.  add.l (a1,d1*8),d2
  5413.  move.w minz,d5
  5414.  move.w (a2,d1*2),d0
  5415.  divs d5,d2
  5416.  add.w #47,d2
  5417.  move.l ypos,d1
  5418.  divs d4,d1
  5419.  move.w bottomline,d3 
  5420.  bra lineclipped
  5421.  
  5422. bothinfront:
  5423.  
  5424. * Also, usefully enough, both are on-screen
  5425. * so no bottom clipping is needed.
  5426.  
  5427.  move.w (a2,d1*2),d0    ; first x
  5428.  move.w (a2,d3*2),d2    ; second x
  5429.  move.l ypos,d1
  5430.  move.l d1,d3
  5431.  divs d4,d1        ; first y
  5432.  divs d5,d3        ; second y
  5433. lineclipped:
  5434.  move.l #rightsidetab,a3
  5435.  cmp.w d1,d3
  5436.  beq lineflat
  5437.  st drawit
  5438.  bgt lineonright
  5439.  move.l #leftsidetab,a3
  5440.  exg d1,d3
  5441.  exg d0,d2
  5442.  
  5443.  lea (a3,d1*2),a3
  5444.  
  5445.  cmp.w top(pc),d1
  5446.  bge.s .nonewtop
  5447.  move.w d1,top
  5448. .nonewtop:
  5449.  cmp.w bottom(pc),d3
  5450.  ble.s .nonewbot
  5451.  move.w d3,bottom
  5452. .nonewbot:
  5453.  
  5454.  sub.w d1,d3    ; dy
  5455.  sub.w d0,d2    ; dx
  5456.  
  5457.  blt .linegoingleft
  5458.  sub.w #1,d0
  5459.  
  5460.  ext.l d2
  5461.  divs d3,d2
  5462.  move.w d2,d6
  5463.  swap d2
  5464.  
  5465. ; moveq #0,d6
  5466. ; sub.w d3,d2
  5467. ; blt.s .noco
  5468. ;.makeco
  5469. ; addq #1,d6
  5470. ; sub.w d3,d2
  5471. ; bge.s .makeco
  5472. ;.noco
  5473. ; add.w d3,d2
  5474.  
  5475.  move.w d3,d4
  5476.  move.w d3,d5
  5477.  subq #1,d5
  5478.  move.w d6,d1
  5479.  addq #1,d1
  5480.  
  5481. .pixlopright:
  5482.  move.w d0,(a3)+
  5483.  sub.w d2,d4
  5484.  bge.s .nobigstep
  5485.  add.w d1,d0
  5486.  add.w d3,d4
  5487.  dbra d5,.pixlopright
  5488.  bra lineflat
  5489. .nobigstep
  5490.  add.w d6,d0
  5491.  dbra d5,.pixlopright
  5492.  bra lineflat
  5493.  
  5494. .linegoingleft:
  5495.  
  5496.  sub.w #1,d0
  5497.  
  5498.  neg.w d2
  5499.  
  5500.  ext.l d2
  5501.  divs d3,d2
  5502.  move.w d2,d6
  5503.  swap d2
  5504.  
  5505.  
  5506. ; moveq #0,d6
  5507. ; sub.w d3,d2
  5508. ; blt.s .nocol
  5509. ;.makecol
  5510. ; addq #1,d6
  5511. ; sub.w d3,d2
  5512. ; bge.s .makecol
  5513. ;.nocol
  5514. ; add.w d3,d2
  5515.  
  5516.  
  5517.  
  5518.  move.w d3,d4
  5519.  move.w d3,d5
  5520.  subq #1,d5
  5521.  
  5522.  move.w d6,d1
  5523.  addq #1,d1
  5524.  
  5525. .pixlopleft:
  5526.  sub.w d2,d4
  5527.  bge.s .nobigstepl
  5528.  sub.w d1,d0
  5529.  add.w d3,d4
  5530.  move.w d0,(a3)+
  5531.  dbra d5,.pixlopleft
  5532.  bra lineflat
  5533.  
  5534. .nobigstepl
  5535.  sub.w d6,d0
  5536.  move.w d0,(a3)+
  5537.  dbra d5,.pixlopleft
  5538.  bra lineflat
  5539.  
  5540. lineonright:
  5541.  
  5542.  lea (a3,d1*2),a3
  5543.  
  5544.  cmp.w top(pc),d1
  5545.  bge.s .nonewtop
  5546.  move.w d1,top
  5547. .nonewtop:
  5548.  cmp.w bottom(pc),d3
  5549.  ble.s .nonewbot
  5550.  move.w d3,bottom
  5551. .nonewbot:
  5552.  
  5553.  sub.w d1,d3    ; dy
  5554.  sub.w d0,d2    ; dx
  5555.  blt .linegoingleft
  5556. ; addq #1,d0
  5557.  ext.l d2
  5558.  divs d3,d2
  5559.  move.w d2,d6
  5560.  swap d2
  5561.  
  5562. ; moveq #0,d6
  5563. ; sub.w d3,d2
  5564. ; blt.s .noco
  5565. ;.makeco
  5566. ; addq #1,d6
  5567. ; sub.w d3,d2
  5568. ; bge.s .makeco
  5569. ;.noco
  5570. ; add.w d3,d2
  5571.  
  5572.  move.w d3,d4
  5573.  move.w d3,d5
  5574.  subq #1,d5
  5575.  move.w d6,d1
  5576.  addq #1,d1
  5577.  
  5578. .pixlopright:
  5579.  sub.w d2,d4
  5580.  bge.s .nobigstep
  5581.  add.w d1,d0
  5582.  add.w d3,d4
  5583.  move.w d0,(a3)+
  5584.  dbra d5,.pixlopright
  5585.  bra lineflat
  5586.  
  5587. .nobigstep
  5588.  add.w d6,d0
  5589.  move.w d0,(a3)+
  5590.  dbra d5,.pixlopright
  5591.  bra lineflat
  5592.  
  5593. .linegoingleft:
  5594. ; addq #1,d0
  5595.  neg.w d2
  5596.  
  5597.  ext.l d2
  5598.  divs d3,d2
  5599.  move.w d2,d6
  5600.  swap d2
  5601.  
  5602.  
  5603. ; moveq #0,d6
  5604. ; sub.w d3,d2
  5605. ; blt.s .nocol
  5606. ;.makecol
  5607. ; addq #1,d6
  5608. ; sub.w d3,d2
  5609. ; bge.s .makecol
  5610. ;.nocol
  5611. ; add.w d3,d2
  5612.  
  5613.  move.w d3,d4
  5614.  move.w d3,d5
  5615.  subq #1,d5
  5616.  move.w d6,d1
  5617.  addq #1,d1
  5618.  
  5619. .pixlopleft:
  5620.  move.w d0,(a3)+
  5621.  sub.w d2,d4
  5622.  bge.s .nobigstepl
  5623.  sub.w d1,d0
  5624.  add.w d3,d4
  5625.  dbra d5,.pixlopleft
  5626.  bra lineflat
  5627.  
  5628. .nobigstepl
  5629.  sub.w d6,d0
  5630.  dbra d5,.pixlopleft
  5631.  
  5632. lineflat:
  5633.  
  5634. bothbehind:
  5635.  dbra d7,sideloop
  5636.  bra pastsides
  5637.  
  5638. fbr: dc.w 0
  5639. sbr: dc.w 0
  5640.  
  5641. goursides:
  5642.  
  5643.  move.w #80,top
  5644.  move.w #-1,bottom
  5645.  move.w #0,drawit
  5646.  move.l #Rotated,a1
  5647.  move.l #OnScreen,a2
  5648.  move.w (a0)+,d7    ; no of sides
  5649. sideloopGOUR:
  5650.  move.w minz,d6
  5651.  move.w (a0)+,d1
  5652.  move.w (a0),d3
  5653.  
  5654.  move.l PointBrightsPtr,a4
  5655.  move.w (a4,d1.w*4),fbr
  5656.  move.w (a4,d3.w*4),sbr
  5657.  
  5658.  move.w 6(a1,d1*8),d4    ;first z
  5659.  cmp.w d6,d4
  5660.  bgt firstinfrontGOUR
  5661.  move.w 6(a1,d3*8),d5    ; sec z
  5662.  cmp.w d6,d5
  5663.  ble bothbehindGOUR
  5664. ** line must be on left and partially behind.
  5665.  sub.w d5,d4
  5666.  
  5667.  move.w fbr,d0
  5668.  sub.w sbr,d0
  5669.  sub.w d5,d6
  5670.  muls d6,d0
  5671.  divs d4,d0
  5672.  add.w sbr,d0
  5673.  move.w d0,fbr
  5674.  
  5675.  move.l (a1,d1*8),d0
  5676.  sub.l (a1,d3*8),d0
  5677.  asr.l #7,d0
  5678.  muls d6,d0    ; new x coord
  5679.  divs d4,d0
  5680.  ext.l d0
  5681.  asl.l #7,d0
  5682.  
  5683.  add.l (a1,d3*8),d0
  5684.  move.w minz,d4
  5685.  move.w (a2,d3*2),d2
  5686.  divs d4,d0
  5687.  add.w #47,d0
  5688.  move.l ypos,d3
  5689.  divs d5,d3
  5690.  
  5691.  move.w bottomline,d1 
  5692.  bra lineclippedGOUR
  5693.  
  5694. firstinfrontGOUR:
  5695.  move.w 6(a1,d3*8),d5    ; sec z
  5696.  cmp.w d6,d5
  5697.  bgt bothinfrontGOUR
  5698. ** line must be on right and partially behind.
  5699.  sub.w d4,d5    ; dz
  5700.  
  5701.  move.w sbr,d2
  5702.  sub.w fbr,d2
  5703.  sub.w d4,d6
  5704.  muls d6,d2
  5705.  divs d5,d2
  5706.  add.w fbr,d2
  5707.  move.w d2,sbr
  5708.  
  5709.  move.l (a1,d3*8),d2
  5710.  sub.l (a1,d1*8),d2    ; dx
  5711.  asr.l #7,d2
  5712.  muls d6,d2    ; new x coord
  5713.  divs d5,d2
  5714.  ext.l d2
  5715.  asl.l #7,d2
  5716.  add.l (a1,d1*8),d2
  5717.  move.w minz,d5
  5718.  move.w (a2,d1*2),d0
  5719.  divs d5,d2
  5720.  add.w #47,d2
  5721.  move.l ypos,d1
  5722.  divs d4,d1
  5723.  move.w bottomline,d3 
  5724.  bra lineclippedGOUR
  5725.  
  5726. bothinfrontGOUR:
  5727.  
  5728. * Also, usefully enough, both are on-screen
  5729. * so no bottom clipping is needed.
  5730.  
  5731.  move.w (a2,d1*2),d0    ; first x
  5732.  move.w (a2,d3*2),d2    ; second x
  5733.  move.l ypos,d1
  5734.  move.l d1,d3
  5735.  divs d4,d1        ; first y
  5736.  divs d5,d3        ; second y
  5737. lineclippedGOUR:
  5738.  move.l #rightsidetab,a3
  5739.  cmp.w d1,d3
  5740.  bne linenotflatGOUR
  5741.  
  5742. ; move.w fbr,d4
  5743. ; move.w sbr,d5
  5744. ; cmp.w d0,d2
  5745. ; bgt.s .nsw
  5746. ; exg d4,d5
  5747. ;.nsw:
  5748.  
  5749. ; move.l #leftbrighttab,a3
  5750. ; move.w d4,(a3,d3.w)
  5751. ; move.l #rightbrighttab,a3
  5752. ; move.w d5,(a3,d3.w) 
  5753.  bra lineflatGOUR
  5754.  
  5755. linenotflatGOUR
  5756.  st drawit
  5757.  bgt lineonrightGOUR
  5758.  move.l #leftsidetab,a3
  5759.  exg d1,d3
  5760.  exg d0,d2
  5761.  
  5762.  lea (a3,d1*2),a3
  5763.  lea leftbrighttab-leftsidetab(a3),a4
  5764.  
  5765.  cmp.w top(pc),d1
  5766.  bge.s .nonewtop
  5767.  move.w d1,top
  5768. .nonewtop:
  5769.  cmp.w bottom(pc),d3
  5770.  ble.s .nonewbot
  5771.  move.w d3,bottom
  5772. .nonewbot:
  5773.  
  5774.  sub.w d1,d3    ; dy
  5775.  sub.w d0,d2    ; dx
  5776.  
  5777.  blt .linegoingleft
  5778.  sub.w #1,d0
  5779.  
  5780.  ext.l d2
  5781.  divs d3,d2
  5782.  move.w d2,d6
  5783.  swap d2
  5784.  move.w d2,a5
  5785.  
  5786. ; moveq #0,d6
  5787. ; sub.w d3,d2
  5788. ; blt.s .noco
  5789. ;.makeco
  5790. ; addq #1,d6
  5791. ; sub.w d3,d2
  5792. ; bge.s .makeco
  5793. ;.noco
  5794. ; add.w d3,d2
  5795.  
  5796.  move.w d3,d4
  5797.  move.w d3,d5
  5798.  subq #1,d5
  5799.  move.w d6,d1
  5800.  addq #1,d1
  5801.  move.w d1,a6
  5802.  
  5803.  moveq #0,d1
  5804.  move.w sbr,d1
  5805.  move.w fbr,d2
  5806.  sub.w d1,d2
  5807.  ext.l d2
  5808.  asl.w #8,d2
  5809.  asl.w #3,d2
  5810.  divs d3,d2 
  5811.  ext.l d2
  5812.  asl.l #5,d2
  5813.  swap d1
  5814.  
  5815. .pixlopright:
  5816.  move.w d0,(a3)+
  5817.  swap d1
  5818.  move.w d1,(a4)+
  5819.  swap d1
  5820.  add.l d2,d1
  5821.  
  5822.  sub.w a5,d4
  5823.  bge.s .nobigstep
  5824.  add.w a6,d0
  5825.  add.w d3,d4
  5826.  dbra d5,.pixlopright
  5827.  bra lineflatGOUR
  5828. .nobigstep
  5829.  
  5830.  add.w d6,d0
  5831.  dbra d5,.pixlopright
  5832.  bra lineflatGOUR
  5833.  
  5834. .linegoingleft:
  5835.  
  5836.  sub.w #1,d0
  5837.  
  5838.  neg.w d2
  5839.  
  5840.  ext.l d2
  5841.  divs d3,d2
  5842.  move.w d2,d6
  5843.  swap d2
  5844.  
  5845.  
  5846. ; moveq #0,d6
  5847. ; sub.w d3,d2
  5848. ; blt.s .nocol
  5849. ;.makecol
  5850. ; addq #1,d6
  5851. ; sub.w d3,d2
  5852. ; bge.s .makecol
  5853. ;.nocol
  5854. ; add.w d3,d2
  5855.  
  5856.  move.w d3,d4
  5857.  move.w d3,d5
  5858.  subq #1,d5
  5859.  
  5860.  move.w d6,d1
  5861.  addq #1,d1
  5862.  move.w d1,a6
  5863.  move.w d2,a5
  5864.  
  5865.  moveq #0,d1
  5866.  move.w sbr,d1
  5867.  move.w fbr,d2
  5868.  sub.w d1,d2
  5869.  ext.l d2
  5870.  asl.w #8,d2
  5871.  asl.w #3,d2
  5872.  divs d3,d2 
  5873.  ext.l d2
  5874.  asl.l #5,d2
  5875.  swap d1
  5876.  
  5877. .pixlopleft:
  5878.  
  5879.  swap d1
  5880.  move.w d1,(a4)+
  5881.  swap d1
  5882.  add.l d2,d1
  5883.  
  5884.  sub.w a5,d4
  5885.  bge.s .nobigstepl
  5886.  sub.w a6,d0
  5887.  add.w d3,d4
  5888.  move.w d0,(a3)+
  5889.  dbra d5,.pixlopleft
  5890.  bra lineflatGOUR
  5891.  
  5892. .nobigstepl
  5893.  sub.w d6,d0
  5894.  move.w d0,(a3)+
  5895.  dbra d5,.pixlopleft
  5896.  bra lineflatGOUR
  5897.  
  5898. lineonrightGOUR:
  5899.  
  5900.  lea (a3,d1*2),a3
  5901.  
  5902.  lea rightbrighttab-rightsidetab(a3),a4
  5903.  
  5904.  cmp.w top(pc),d1
  5905.  bge.s .nonewtop
  5906.  move.w d1,top
  5907. .nonewtop:
  5908.  cmp.w bottom(pc),d3
  5909.  ble.s .nonewbot
  5910.  move.w d3,bottom
  5911. .nonewbot:
  5912.  
  5913.  sub.w d1,d3    ; dy
  5914.  sub.w d0,d2    ; dx
  5915.  blt .linegoingleft
  5916. ; addq #1,d0
  5917.  ext.l d2
  5918.  divs d3,d2
  5919.  move.w d2,d6
  5920.  swap d2
  5921.  
  5922. ; moveq #0,d6
  5923. ; sub.w d3,d2
  5924. ; blt.s .noco
  5925. ;.makeco
  5926. ; addq #1,d6
  5927. ; sub.w d3,d2
  5928. ; bge.s .makeco
  5929. ;.noco
  5930. ; add.w d3,d2
  5931.  
  5932.  move.w d3,d4
  5933.  move.w d3,d5
  5934.  subq #1,d5
  5935.  move.w d6,d1
  5936.  addq #1,d1
  5937.  
  5938.  move.w d1,a6
  5939.  move.w d2,a5
  5940.  
  5941.  moveq #0,d1
  5942.  move.w fbr,d1
  5943.  move.w sbr,d2
  5944.  sub.w d1,d2
  5945.  ext.l d2
  5946.  asl.w #8,d2
  5947.  asl.w #3,d2
  5948.  divs d3,d2 
  5949.  ext.l d2
  5950.  asl.l #5,d2
  5951.  swap d1
  5952.  
  5953. .pixlopright:
  5954.  
  5955.  swap d1
  5956.  move.w d1,(a4)+
  5957.  swap d1
  5958.  add.l d2,d1
  5959.  
  5960.  sub.w a5,d4
  5961.  bge.s .nobigstep
  5962.  add.w a6,d0
  5963.  add.w d3,d4
  5964.  move.w d0,(a3)+
  5965.  dbra d5,.pixlopright
  5966.  bra lineflatGOUR
  5967.  
  5968. .nobigstep
  5969.  add.w d6,d0
  5970.  move.w d0,(a3)+
  5971.  dbra d5,.pixlopright
  5972.  bra lineflatGOUR
  5973.  
  5974. .linegoingleft:
  5975. ; addq #1,d0
  5976.  neg.w d2
  5977.  
  5978.  ext.l d2
  5979.  divs d3,d2
  5980.  move.w d2,d6
  5981.  swap d2
  5982.  
  5983.  
  5984. ; moveq #0,d6
  5985. ; sub.w d3,d2
  5986. ; blt.s .nocol
  5987. ;.makecol
  5988. ; addq #1,d6
  5989. ; sub.w d3,d2
  5990. ; bge.s .makecol
  5991. ;.nocol
  5992. ; add.w d3,d2
  5993.  
  5994.  move.w d3,d4
  5995.  move.w d3,d5
  5996.  subq #1,d5
  5997.  move.w d6,d1
  5998.  addq #1,d1
  5999.  move.w d1,a6
  6000.  move.w d2,a5
  6001.  
  6002.  moveq #0,d1
  6003.  move.w fbr,d1
  6004.  move.w sbr,d2
  6005.  sub.w d1,d2
  6006.  ext.l d2
  6007.  asl.w #8,d2
  6008.  asl.w #3,d2
  6009.  divs d3,d2 
  6010.  ext.l d2
  6011.  asl.l #5,d2
  6012.  swap d1
  6013.  
  6014. .pixlopleft:
  6015.  
  6016.  swap d1
  6017.  move.w d1,(a4)+
  6018.  swap d1
  6019.  add.l d2,d1
  6020.  
  6021.  move.w d0,(a3)+
  6022.  sub.w a5,d4
  6023.  bge.s .nobigstepl
  6024.  sub.w a6,d0
  6025.  add.w d3,d4
  6026.  dbra d5,.pixlopleft
  6027.  bra lineflatGOUR
  6028.  
  6029. .nobigstepl
  6030.  sub.w d6,d0
  6031.  dbra d5,.pixlopleft
  6032.  
  6033. lineflatGOUR:
  6034.  
  6035. bothbehindGOUR:
  6036.  dbra d7,sideloopGOUR
  6037.  
  6038. pastsides:
  6039.  
  6040.  
  6041.  addq #2,a0
  6042.  
  6043.  move.w #104*4,linedir
  6044.  move.l frompt,a6
  6045.  add.l #104*4*41,a6
  6046.  move.w (a0)+,scaleval
  6047.  move.w (a0)+,whichtile
  6048.  move.w (a0)+,d6
  6049.  add.w ZoneBright,d6
  6050.  move.w d6,lighttype
  6051.  move.w above(pc),d6
  6052.  beq groundfloor
  6053. * on ceiling:
  6054.  move.w #-104*4,linedir
  6055.  suba.w #104*4,a6
  6056. groundfloor:
  6057.  
  6058.  move.w xoff,d6
  6059.  move.w zoff,d7
  6060.  add.w xwobxoff,d7
  6061.  add.w xwobzoff,d6
  6062.  swap d6
  6063.  swap d7
  6064.  clr.w d6
  6065.  clr.w d7
  6066.  move.w scaleval(pc),d3
  6067.  beq.s .samescale
  6068.  bgt.s .scaledown
  6069.  neg.w d3
  6070.  asr.l d3,d7
  6071.  asr.l d3,d6
  6072.  bra.s .samescale
  6073. .scaledown:
  6074.  asl.l d3,d6
  6075.  asl.l d3,d7
  6076. .samescale
  6077.  move.l d6,sxoff
  6078.  move.l d7,szoff
  6079.  bra pastscale 
  6080.  
  6081.  asr.l #3,d1
  6082.  asr.l #3,d2
  6083.  asr.l #2,d1
  6084.  asr.l #2,d2
  6085.  asr.l #1,d1
  6086.  asr.l #1,d2
  6087. scaleprogfrom
  6088.  nop
  6089.  nop
  6090.  asl.l #1,d1
  6091.  asl.l #1,d2
  6092.  asl.l #2,d1
  6093.  asl.l #2,d2
  6094.  asl.l #3,d1
  6095.  asl.l #3,d2
  6096.  
  6097. top: dc.w 0
  6098. bottom: dc.w 0
  6099. ypos: dc.l 0
  6100. nfloors: dc.w 0
  6101. lighttype: dc.w 0
  6102. above: dc.w 0 
  6103. linedir: dc.w 0
  6104. distaddr: dc.w 0
  6105.  
  6106. minz: dc.w 0
  6107. leftsidetab:
  6108.  ds.w 180
  6109. rightsidetab:
  6110.  ds.w 180
  6111. leftbrighttab:
  6112.  ds.w 180
  6113. rightbrighttab:
  6114.  ds.w 180
  6115.  
  6116. PointBrights:
  6117.  dc.l 0
  6118. CurrentPointBrights:
  6119.  ds.l 1000
  6120.  
  6121. movespd: dc.w 0
  6122. largespd: dc.l 0
  6123. disttobot: dc.w 0
  6124.  
  6125. pastscale:
  6126.  
  6127.  tst.b drawit(pc)
  6128.  beq dontdrawfloor
  6129.  
  6130.  move.l a0,-(a7)
  6131.  
  6132.  move.l #leftsidetab,a4
  6133.  move.w top(pc),d1
  6134.  
  6135.  move.w #39,d7
  6136.  sub.w d1,d7
  6137.  move.w d7,disttobot
  6138.  
  6139.  move.w bottom(pc),d7
  6140.  tst.w above
  6141.  beq.s clipfloor
  6142.  
  6143.  move.w #40,d3
  6144.  move.w d3,d4
  6145.  sub.w topclip,d3
  6146.  sub.w botclip,d4
  6147.  cmp.w d3,d1
  6148.  bge predontdrawfloor
  6149.  cmp.w d4,d7
  6150.  blt predontdrawfloor
  6151.  cmp.w d4,d1
  6152.  bge.s .nocliptoproof
  6153.  move.w d4,d1
  6154. .nocliptoproof
  6155.  cmp.w d3,d7
  6156.  blt doneclip
  6157.  move.w d3,d7
  6158.  bra doneclip
  6159.  
  6160. clipfloor:
  6161.  move.w botclip,d4
  6162.  sub.w #40,d4
  6163.  cmp.w d4,d1
  6164.  bge predontdrawfloor
  6165.  move.w topclip,d3
  6166.  sub.w #40,d3
  6167.  cmp.w d3,d1
  6168.  bge.s .nocliptopfloor
  6169.  move.w d3,d1
  6170. .nocliptopfloor 
  6171.  cmp.w d3,d7
  6172.  ble predontdrawfloor
  6173.  cmp.w d4,d7
  6174.  blt.s .noclipbotfloor
  6175.  move.w d4,d7
  6176. .noclipbotfloor:
  6177.  
  6178. doneclip:
  6179.  
  6180.  lea (a4,d1*2),a4
  6181. ; move.l #dists,a2
  6182.  move.w distaddr,d0
  6183.  muls #64,d0
  6184.  move.l d0,a2
  6185. ; muls #25,d0
  6186. ; adda.w d0,a2
  6187. ; lea (a2,d1*2),a2
  6188.  sub.w d1,d7
  6189.  ble predontdrawfloor 
  6190.  move.w d1,d0
  6191.  bne.s .notzero
  6192.  moveq #1,d0
  6193. .notzero
  6194.  muls linedir,d1
  6195.  add.l d1,a6
  6196.  move.l #floorscalecols,a1
  6197.  move.l LineToUse,a5
  6198.  
  6199.  tst.b gourfloor
  6200.  bne dogourfloor
  6201.  
  6202.  tst.b anyclipping
  6203.  beq dofloornoclip
  6204.  
  6205. dofloor:
  6206. ; move.w (a2)+,d0
  6207.  move.w leftclip(pc),d3
  6208.  move.w rightclip(pc),d4
  6209.  move.w rightsidetab-leftsidetab(a4),d2
  6210.  
  6211.  addq #1,d2
  6212.  cmp.w d3,d2
  6213.  ble.s nodrawline
  6214.  cmp.w d4,d2
  6215.  ble.s noclipright
  6216.  move.w d4,d2
  6217. noclipright:
  6218.  move.w (a4),d1
  6219.  cmp.w d4,d1
  6220.  bge.s nodrawline
  6221.  cmp.w d3,d1
  6222.  bge.s noclipleft
  6223.  move.w d3,d1
  6224. noclipleft:
  6225.  cmp.w d1,d2
  6226.  ble.s nodrawline
  6227.  
  6228.  move.w d1,leftedge
  6229.  move.w d2,rightedge
  6230.  
  6231. ; moveq #0,d1
  6232. ; moveq #0,d3
  6233. ; move.w leftbrighttab-leftsidetab(a4),d1
  6234. ; bge.s .okbl
  6235. ; moveq #0,d1
  6236. ;.okbl:
  6237.  
  6238. ; move.w rightbrighttab-leftsidetab(a4),d3
  6239. ; bge.s .okbr
  6240. ; moveq #0,d3
  6241. ;.okbr:
  6242.  
  6243. ; sub.w d1,d3
  6244. ; asl.w #8,d1
  6245. ; move.l d1,leftbright
  6246. ; swap d3
  6247. ; asr.l #5,d3
  6248. ; divs d5,d3
  6249. ; move.w d3,d5
  6250. ; muls.w d6,d5
  6251. ; asr.l #3,d5
  6252. ; clr.b d5
  6253. ; add.w d5,leftbright+2
  6254.  
  6255. ; ext.l d3
  6256. ; asl.l #5,d3
  6257. ; swap d3
  6258. ; asl.w #8,d3
  6259. ; move.l d3,brightspd
  6260.  
  6261.  move.l a6,a3
  6262.  movem.l d0/d7/a2/a4/a5/a6,-(a7)
  6263.  move.l a2,d7
  6264.  divs d0,d7
  6265.  move.w d7,d0
  6266.  jsr (a5)
  6267.  movem.l (a7)+,d0/d7/a2/a4/a5/a6
  6268. nodrawline
  6269.  sub.w #1,disttobot
  6270.  adda.w linedir(pc),a6
  6271.  addq #2,a4
  6272.  addq #1,d0
  6273.  subq #1,d7
  6274.  bgt dofloor
  6275.  
  6276. predontdrawfloor
  6277.  move.l (a7)+,a0
  6278.  
  6279. dontdrawfloor:
  6280.  
  6281.  rts
  6282.  
  6283. anyclipping: dc.w 0
  6284.  
  6285. dofloornoclip:
  6286. ; move.w (a2)+,d0
  6287.  move.w rightsidetab-leftsidetab(a4),d2
  6288.  addq #1,d2
  6289.  move.w (a4)+,d1
  6290.  move.w d1,leftedge
  6291.  move.w d2,rightedge
  6292.  
  6293. ; sub.w d1,d2
  6294.  
  6295. ; moveq #0,d1
  6296. ; moveq #0,d3
  6297. ; move.w leftbrighttab-leftsidetab(a4),d1
  6298. ; bge.s .okbl
  6299. ; moveq #0,d1
  6300. ;.okbl:
  6301.  
  6302. ; move.w rightbrighttab-leftsidetab(a4),d3
  6303. ; bge.s .okbr
  6304. ; moveq #0,d3
  6305. ;.okbr:
  6306.  
  6307. ; sub.w d1,d3
  6308. ; asl.w #8,d1
  6309. ; move.l d1,leftbright
  6310. ; swap d3
  6311. ; asr.l #5,d3
  6312. ; divs d2,d3
  6313. ; ext.l d3
  6314. ; asl.l #5,d3
  6315. ; swap d3
  6316. ; asl.w #8,d3
  6317. ; move.l d3,brightspd
  6318.  
  6319.  move.l a6,a3
  6320.  movem.l d0/d7/a2/a4/a5/a6,-(a7)
  6321.  move.l a2,d7
  6322.  divs d0,d7
  6323.  move.w d7,d0
  6324.  jsr (a5)
  6325.  movem.l (a7)+,d0/d7/a2/a4/a5/a6
  6326.  sub.w #1,disttobot
  6327.  adda.w linedir(pc),a6
  6328.  addq #1,d0
  6329.  subq #1,d7
  6330.  bgt dofloornoclip
  6331.  
  6332.  bra predontdrawfloor
  6333.  
  6334. dogourfloor:
  6335.  tst.b anyclipping
  6336.  beq dofloornoclipGOUR
  6337.  
  6338. dofloorGOUR:
  6339. ; move.w (a2)+,d0
  6340.  move.w leftclip(pc),d3
  6341.  move.w rightclip(pc),d4
  6342.  move.w rightsidetab-leftsidetab(a4),d2
  6343.  
  6344.  move.w d2,d5
  6345.  sub.w (a4),d5
  6346.  addq #1,d5
  6347.  moveq #0,d6
  6348.  
  6349.  addq #1,d2
  6350.  cmp.w d3,d2
  6351.  ble nodrawlineGOUR
  6352.  cmp.w d4,d2
  6353.  ble.s nocliprightGOUR
  6354.  move.w d4,d2
  6355. nocliprightGOUR:
  6356.  move.w (a4),d1
  6357.  cmp.w d4,d1
  6358.  bge nodrawlineGOUR
  6359.  cmp.w d3,d1
  6360.  bge.s noclipleftGOUR
  6361.  move.w d3,d6
  6362.  subq #1,d6
  6363.  sub.w d1,d6
  6364.  move.w d3,d1
  6365. noclipleftGOUR:
  6366.  cmp.w d1,d2
  6367.  ble nodrawlineGOUR
  6368.  
  6369.  move.w d1,leftedge
  6370.  move.w d2,rightedge
  6371.  
  6372.  move.l a2,d2
  6373.  divs d0,d2
  6374.  move.w d2,dst
  6375.  asr.w #7,d2
  6376. ; addq #5,d2
  6377. ; add.w lighttype,d2
  6378.  
  6379.  moveq #0,d1
  6380.  moveq #0,d3
  6381.  move.w leftbrighttab-leftsidetab(a4),d1
  6382.  add.w d2,d1
  6383.  bge.s .okbl
  6384.  moveq #0,d1
  6385. .okbl:
  6386.  asr.w #1,d1
  6387.  cmp.w #14,d1
  6388.  ble.s .okdl
  6389.  move.w #14,d1
  6390. .okdl:
  6391.  
  6392.  move.w rightbrighttab-leftsidetab(a4),d3
  6393.  add.w d2,d3
  6394.  bge.s .okbr
  6395.  moveq #0,d3
  6396. .okbr:
  6397.  asr.w #1,d3
  6398.  cmp.w #14,d3
  6399.  ble.s .okdr
  6400.  move.w #14,d3
  6401. .okdr:
  6402.  
  6403.  sub.w d1,d3
  6404.  asl.w #8,d1
  6405.  move.l d1,leftbright
  6406.  swap d3
  6407.  tst.l d3
  6408.  bgt.s .OKITSPOSALREADY 
  6409.  neg.l d3
  6410.  asr.l #5,d3
  6411.  divs d5,d3
  6412.  neg.w d3
  6413.  bra.s .OKNOWITSNEG
  6414.  
  6415. .OKITSPOSALREADY
  6416.  asr.l #5,d3
  6417.  divs d5,d3
  6418. .OKNOWITSNEG
  6419.  muls d3,d6
  6420.  add.w #256*8,d6
  6421.  asr.w #3,d6
  6422.  clr.b d6
  6423.  add.w d6,leftbright+2
  6424.  
  6425.  ext.l d3
  6426.  asl.l #5,d3
  6427.  swap d3
  6428.  asl.w #8,d3
  6429.  move.l d3,brightspd
  6430.  
  6431.  move.l a6,a3
  6432.  movem.l d0/d7/a2/a4/a5/a6,-(a7)
  6433.  move.w dst,d0
  6434.  lea floorscalecols,a1
  6435.  move.l floortile,a0
  6436.  adda.w whichtile,a0
  6437.  jsr pastfloorbright
  6438.  movem.l (a7)+,d0/d7/a2/a4/a5/a6
  6439. nodrawlineGOUR
  6440.  
  6441.  sub.w #1,disttobot
  6442.  
  6443.  adda.w linedir(pc),a6
  6444.  addq #2,a4
  6445.  addq #1,d0
  6446.  subq #1,d7
  6447.  bgt dofloorGOUR
  6448.  
  6449. predontdrawfloorGOUR
  6450.  move.l (a7)+,a0
  6451.  
  6452. dontdrawfloorGOUR:
  6453.  
  6454.  rts
  6455.  
  6456. dofloornoclipGOUR:
  6457. ; move.w (a2)+,d0
  6458.  move.w rightsidetab-leftsidetab(a4),d2
  6459.  addq #1,d2
  6460.  move.w (a4),d1
  6461.  move.w d1,leftedge
  6462.  move.w d2,rightedge
  6463.  
  6464.  sub.w d1,d2
  6465.  
  6466.  move.l a2,d6
  6467.  divs d0,d6
  6468.  move.w d6,d5
  6469.  asr.w #7,d5
  6470. ; addq #5,d5
  6471. ; add.w lighttype,d5
  6472.  
  6473.  moveq #0,d1
  6474.  moveq #0,d3
  6475.  move.w leftbrighttab-leftsidetab(a4),d1
  6476.  add.w d5,d1
  6477.  bge.s .okbl
  6478.  moveq #0,d1
  6479. .okbl:
  6480.  asr.w #1,d1
  6481.  cmp.w #14,d1
  6482.  ble.s .okdl
  6483.  move.w #14,d1
  6484. .okdl:
  6485.  
  6486.  move.w rightbrighttab-leftsidetab(a4),d3
  6487.  add.w d5,d3
  6488.  bge.s .okbr
  6489.  moveq #0,d3
  6490. .okbr:
  6491.  asr.w #1,d3
  6492.  cmp.w #14,d3
  6493.  ble.s .okdr
  6494.  move.w #14,d3
  6495. .okdr:
  6496.  
  6497.  sub.w d1,d3
  6498.  asl.w #8,d1
  6499.  move.l d1,leftbright
  6500.  swap d3
  6501.  asr.l #5,d3
  6502.  divs d2,d3
  6503.  ext.l d3
  6504.  asl.l #5,d3
  6505.  swap d3
  6506.  asl.w #8,d3
  6507.  move.l d3,brightspd
  6508.  
  6509.  
  6510.  move.l a6,a3
  6511.  movem.l d0/d7/a2/a4/a5/a6,-(a7)
  6512.  move.w d6,d0
  6513.  move.w d0,dst
  6514.  lea floorscalecols,a1
  6515.  move.l floortile,a0
  6516.  adda.w whichtile,a0
  6517.  jsr pastfloorbright
  6518.  movem.l (a7)+,d0/d7/a2/a4/a5/a6
  6519.  sub.w #1,disttobot
  6520.  adda.w linedir(pc),a6
  6521.  addq #2,a4
  6522.  addq #1,d0
  6523.  subq #1,d7
  6524.  bgt dofloornoclipGOUR
  6525.  
  6526.  bra predontdrawfloorGOUR
  6527.  
  6528.  
  6529.  
  6530. dists:
  6531. ; incbin "floordists"
  6532. drawit: dc.w 0
  6533.  
  6534. LineToUse: dc.l 0
  6535.  
  6536. ***************************
  6537. * Right then, time for the floor
  6538. * routine...
  6539. * For test purposes, give it
  6540. * a3 = point to screen
  6541. * d0= z distance away
  6542. * and sinval+cosval must be set up.
  6543. ***************************
  6544.  
  6545. BLACKFLOOR:
  6546.  moveq #0,d0
  6547.  bra.s DOBLACK
  6548.  
  6549. SimpleFloorLine:
  6550.  
  6551.  CACHE_OFF d2
  6552.  
  6553.  move.l #doacrossline,a1
  6554.  move.w leftedge(pc),d1
  6555.  move.w rightedge(pc),d3
  6556.  sub.w d1,d3
  6557.  lea (a1,d1.w*4),a1
  6558.  move.w (a1,d3.w*4),d4
  6559.  move.w #$4e75,(a1,d3.w*4)
  6560.  
  6561.  tst.b CLRNOFLOOR
  6562.  bne.s BLACKFLOOR
  6563.  
  6564.  move.l #PLAINSCALE,a2
  6565.  
  6566.  move.w d0,d2
  6567.  move.w lighttype,d1
  6568.  asr.w #8,d2
  6569.  add.w #5,d1
  6570.  add.w d2,d1
  6571.  bge.s .fixedbright
  6572.  moveq #0,d1
  6573. .fixedbright:
  6574.  cmp.w #28,d1
  6575.  ble.s .smallbright
  6576.  move.w #28,d1
  6577. .smallbright:
  6578.  lea (a2,d1.w*2),a2
  6579.  
  6580.  move.w whichtile,d0
  6581.  move.w d0,d1
  6582.  and.w #$3,d1
  6583.  and.w #$300,d0
  6584.  lsl.b #6,d1
  6585.  move.b d1,d0
  6586.  move.w d0,tstwhich
  6587.  move.w (a2,d0.w),d0
  6588.  
  6589. DOBLACK:
  6590.  jsr (a1)
  6591.  move.w d4,(a1,d3.w*4)
  6592.  
  6593.  CACHE_ON d2
  6594.  
  6595.  rts
  6596.  
  6597. tstwhich: dc.w 0
  6598. whichtile: dc.w 0
  6599.   
  6600. PLAINSCALE: incbin "ab3:includes/plainscale"
  6601.   
  6602. storeit: dc.l 0
  6603.  
  6604. doacrossline:
  6605. val SET 0
  6606.  REPT 32
  6607.  move.w d0,val(a3)
  6608. val SET val+4
  6609.  ENDR
  6610. val SET val+4
  6611.  REPT 32
  6612.  move.w d0,val(a3)
  6613. val SET val+4
  6614.  ENDR
  6615. val SET val+4
  6616.  REPT 32
  6617.  move.w d0,val(a3)
  6618. val SET val+4
  6619.  ENDR
  6620.  rts
  6621.  
  6622.  
  6623. leftedge: dc.w 0
  6624. rightedge: dc.w 0
  6625.  
  6626. rndpt: dc.l rndtab
  6627.  
  6628.  
  6629. dst: dc.w 0
  6630.  
  6631. FloorLine:
  6632.  
  6633.  move.l floortile,a0
  6634.  adda.w whichtile,a0
  6635.  move.w lighttype,d1
  6636.  move.w d0,dst
  6637.  move.w d0,d2
  6638. *********************
  6639. * Old version
  6640.  asr.w #8,d2
  6641.  add.w #5,d1
  6642. *********************
  6643. ; asr.w #3,d2
  6644. ; sub.w #4,d2
  6645. ; cmp.w #6,d2
  6646. ; blt.s flbrbr
  6647. ; move.w #6,d2
  6648. ;flbrbr:
  6649. *********************
  6650.  add.w d2,d1
  6651.  bge.s .fixedbright
  6652.  moveq #0,d1
  6653. .fixedbright:
  6654.  cmp.w #28,d1
  6655.  ble.s .smallbright
  6656.  move.w #28,d1
  6657. .smallbright:
  6658.  lea floorscalecols,a1
  6659.  add.l floorbright(pc,d1.w*4),a1
  6660.  bra pastfloorbright
  6661.  
  6662. ConstCol: dc.w 0
  6663.  
  6664. BumpLine:
  6665.  
  6666.  tst.b smoothbumps
  6667.  beq.s Chunky
  6668.  
  6669.  move.l #SmoothTile,a0
  6670.  lea Smoothscalecols,a1
  6671.  bra pastast
  6672.  
  6673. Chunky:
  6674.  
  6675.  moveq #0,d2
  6676.  move.l #Bumptile,a0
  6677.  move.w whichtile,d2
  6678.  adda.w d2,a0
  6679.  ror.l #2,d2
  6680.  lsr.w #6,d2
  6681.  rol.l #2,d2
  6682.  and.w #15,d2
  6683.  move.l #ConstCols,a1
  6684.  move.w (a1,d2.w*2),ConstCol
  6685.  lea Bumpscalecols,a1
  6686.  
  6687. pastast:
  6688.  move.w lighttype,d1
  6689.  
  6690.  move.w d0,dst
  6691.  
  6692.  move.w d0,d2
  6693. *********************
  6694. * Old version
  6695.  asr.w #8,d2
  6696.  add.w #5,d1
  6697. *********************
  6698. ; asr.w #3,d2
  6699. ; sub.w #4,d2
  6700. ; cmp.w #6,d2
  6701. ; blt.s flbrbr
  6702. ; move.w #6,d2
  6703. ;flbrbr:
  6704. *********************
  6705.  add.w d2,d1
  6706.  bge.s .fixedbright
  6707.  moveq #0,d1
  6708. .fixedbright:
  6709.  cmp.w #28,d1
  6710.  ble.s .smallbright
  6711.  move.w #28,d1
  6712. .smallbright:
  6713.  add.l floorbright(pc,d1.w*4),a1
  6714.  bra pastfloorbright
  6715.  
  6716.  
  6717. floorbright:
  6718.  dc.l 512*0
  6719.  dc.l 512*1
  6720.  dc.l 512*1
  6721.  dc.l 512*2
  6722.  dc.l 512*2
  6723.  
  6724.  dc.l 512*3
  6725.  dc.l 512*3
  6726.  dc.l 512*4
  6727.  dc.l 512*4
  6728.  dc.l 512*5
  6729.  
  6730.  dc.l 512*5
  6731.  dc.l 512*6
  6732.  dc.l 512*6
  6733.  dc.l 512*7
  6734.  dc.l 512*7
  6735.  
  6736.  dc.l 512*8
  6737.  dc.l 512*8
  6738.  dc.l 512*9
  6739.  dc.l 512*9
  6740.  dc.l 512*10
  6741.  
  6742.  dc.l 512*10
  6743.  dc.l 512*11
  6744.  dc.l 512*11
  6745.  dc.l 512*12
  6746.  dc.l 512*12
  6747.  
  6748.  dc.l 512*13
  6749.  dc.l 512*13
  6750.  dc.l 512*14
  6751.  dc.l 512*14
  6752.  
  6753. widthleft: dc.w 0
  6754. scaleval: dc.w 0
  6755. sxoff: dc.l 0
  6756. szoff: dc.l 0
  6757. xoff34: dc.w 0
  6758. zoff34: dc.w 0
  6759. scosval: dc.w 0
  6760. ssinval: dc.w 0
  6761.  
  6762.  
  6763. floorsetbright:
  6764.  move.l #walltiles,a0
  6765.  
  6766. pastfloorbright
  6767.  
  6768.  move.w d0,d1
  6769.  muls cosval,d1    ; change in x across whole width
  6770.  move.w d0,d2
  6771.  muls sinval,d2    ; change in z across whole width
  6772.  neg.l d2
  6773. scaleprog:
  6774.  move.w scaleval(pc),d3
  6775.  beq.s .samescale
  6776.  bgt.s .scaledown
  6777.  neg.w d3
  6778.  asr.l d3,d1
  6779.  asr.l d3,d2
  6780.  bra.s .samescale
  6781. .scaledown:
  6782.  asl.l d3,d1
  6783.  asl.l d3,d2
  6784. .samescale
  6785.  
  6786.  move.l d1,d3 ;    z cos
  6787.  move.l d3,d6
  6788.  move.l d3,d5
  6789.  asr.l #1,d6
  6790.  add.l d6,d3
  6791.  asr.l #1,d3
  6792.  
  6793.  move.l d2,d4    ; z sin
  6794.  move.l d4,d6
  6795.  asr.l #1,d6
  6796.  add.l d4,d6
  6797.  add.l d3,d4
  6798.  neg.l d4    ; start x
  6799.  
  6800.  asr.l #1,d6    ; zsin/2
  6801.  sub.l d6,d5    ; start z
  6802.  
  6803.  add.l sxoff,d4
  6804.  add.l szoff,d5
  6805.  
  6806.  moveq #0,d6
  6807.  move.w leftedge(pc),d6
  6808.  beq.s nomultleft
  6809.  
  6810.  move.l d1,a4
  6811.  move.l d2,a5
  6812.  
  6813.  muls.l d6,d3:d1
  6814.  asr.l #6,d1
  6815.  add.l d1,d4
  6816.  
  6817.  muls.l d6,d3:d2
  6818.  asr.l #6,d2
  6819.  add.l d2,d5
  6820.  move.l a4,d1
  6821.  move.l a5,d2
  6822.  
  6823. nomultleft:
  6824.  
  6825.  move.w d4,startsmoothx
  6826.  move.w d5,startsmoothz
  6827.  
  6828.  swap d4
  6829.  asr.l #8,d5
  6830. ; add.w szoff,d5
  6831. ; add.w sxoff,d4
  6832.  and.w #63,d4
  6833.  and.w #63*256,d5
  6834.  move.b d4,d5
  6835.  
  6836.  asr.l #6,d1
  6837.  asr.l #6,d2
  6838.  move.w d1,a4
  6839.  move.w d2,a5
  6840.  asr.l #8,d2
  6841.  and.w #%0011111100000000,d2
  6842.  swap d1
  6843.  add.w d1,d2
  6844.  move.w #%11111100111111,d1
  6845.  and.w d1,d5
  6846.  swap d5
  6847.  move.w startsmoothz,d5
  6848.  swap d5
  6849.  swap d2
  6850.  move.w a5,d2
  6851.  swap d2
  6852.  
  6853. ***********************************
  6854.  
  6855.  move.w d6,a2
  6856.  move.l d2,d6
  6857.  add.w #256,d6
  6858.  
  6859.  moveq #0,d0
  6860.  
  6861.  tst.w a2
  6862.  beq startatleftedge
  6863.  
  6864.  move.w widthleft(pc),d4
  6865.  
  6866.  move.w rightedge(pc),d3
  6867.  
  6868.  cmp.w #31,a2
  6869.  bgt.s notinfirststrip
  6870.  lea (a3,a2.w*4),a3
  6871.  cmp.w #32,d3
  6872.  ble.s allinfirststrip
  6873.  move.w #32,d7
  6874.  sub.w d7,d3
  6875.  sub.w a2,d7
  6876.  bra intofirststrip
  6877.  
  6878. allinfirststrip
  6879.  sub.w a2,d3
  6880.  move.w d3,d7
  6881.  move.w #0,d4
  6882.  bra allintofirst
  6883.  
  6884. notinfirststrip:
  6885.  sub.w #32,a2
  6886.  sub.w #32,d3
  6887.  adda.w #33*4,a3
  6888.  cmp.w #31,a2
  6889.  bgt.s notstartinsec
  6890.  lea (a3,a2.w*4),a3
  6891.  cmp.w #32,d3
  6892.  ble.s allinsecstrip
  6893.  move.w #32,d7
  6894.  sub.w d7,d3
  6895.  sub.w a2,d7
  6896.  move.w d3,d4
  6897.  bra allintofirst
  6898.  
  6899. allinsecstrip
  6900.  sub.w a2,d3
  6901.  move.w d3,d7
  6902.  move.w #0,d4
  6903.  bra allintofirst
  6904.  rts
  6905.  
  6906. prot8: dc.w 0
  6907.  
  6908. notstartinsec:
  6909.  sub.w #32,a2
  6910.  sub.w #32,d3
  6911.  adda.w #33*4,a3
  6912.  lea (a3,a2.w*4),a3
  6913.  cmp.w #32,d3
  6914.  ble.s allinthirdstrip
  6915.  move.w #32,d7
  6916.  sub.w d7,d3
  6917.  sub.w a2,d7
  6918.  move.w d3,d4
  6919.  bra allintofirst
  6920.  rts
  6921.  
  6922. allinthirdstrip
  6923.  sub.w a2,d3
  6924.  move.w d3,d7
  6925.  move.w #0,d4
  6926.  bra allintofirst
  6927.  rts
  6928.  
  6929. startatleftedge:
  6930.  
  6931.  move.w rightedge(pc),d3
  6932.  sub.w a2,d3
  6933.  
  6934.  move.w d3,d7
  6935.  cmp.w #32,d7
  6936.  ble.s .notoowide
  6937.  move.w #32,d7
  6938. .notoowide:
  6939.  sub.w d7,d3
  6940. intofirststrip:
  6941.  
  6942.  move.w d3,d4
  6943. allintofirst:
  6944.  
  6945.  move.w startsmoothx,d3
  6946.  
  6947. tstwat:
  6948.  
  6949.  tst.b gourfloor
  6950.  bne gouraudfloor
  6951.  
  6952.  tst.b usewater
  6953.  bne texturedwater
  6954.  
  6955.  
  6956. ******************************
  6957. * BumpMap the floor/ceiling! *
  6958.  tst.b usebumps
  6959.  bne.s BumpMap
  6960. ******************************
  6961.  
  6962. ordinary:
  6963.  moveq #0,d0
  6964.  
  6965.  dbra d7,acrossscrn
  6966.  rts
  6967.  
  6968. usebumps: dc.w $0
  6969. smoothbumps: dc.w $0
  6970. gourfloor: dc.w 0
  6971.  
  6972.  include "ab3:source_4000/bumpmap.s"
  6973.  
  6974.  CNOP 0,4
  6975. backbefore:
  6976.  and.w d1,d5
  6977.  move.b (a0,d5.w*4),d0
  6978.  add.w a4,d3
  6979.  move.w (a1,d0.w*2),(a3)
  6980.  addq #4,a3
  6981.  addx.l d6,d5
  6982.  dbcs d7,acrossscrn
  6983.  dbcc d7,backbefore
  6984.  bra.s past1
  6985.  
  6986. acrossscrn:
  6987.  and.w d1,d5
  6988.  move.b (a0,d5.w*4),d0
  6989.  add.w a4,d3
  6990.  move.w (a1,d0.w*2),(a3)
  6991.  addq #4,a3
  6992.  addx.l d2,d5
  6993.  dbcs d7,acrossscrn
  6994.  dbcc d7,backbefore
  6995. past1:
  6996.  bcc.s gotoacross
  6997.  
  6998.  move.w d4,d7
  6999.  bne.s .notdoneyet
  7000.  rts
  7001. .notdoneyet:
  7002.  
  7003.  cmp.w #32,d7
  7004.  ble.s .notoowide
  7005.  move.w #32,d7
  7006. .notoowide
  7007.  sub.w d7,d4  
  7008.  addq #4,a3
  7009.  
  7010.  dbra d7,backbefore
  7011.  rts
  7012.  
  7013.  
  7014. gotoacross:
  7015.  
  7016.  move.w d4,d7
  7017.  bne.s .notdoneyet
  7018.  rts
  7019. .notdoneyet:
  7020.  
  7021.  cmp.w #32,d7
  7022.  ble.s .notoowide
  7023.  move.w #32,d7
  7024. .notoowide
  7025.  sub.w d7,d4  
  7026.  addq #4,a3
  7027.  
  7028.  dbra d7,acrossscrn
  7029.  rts
  7030.  
  7031. leftbright: dc.l 0
  7032. brightspd: dc.l 0
  7033.  
  7034. gouraudfloor:
  7035.  move.l leftbright,d0
  7036.  move.l brightspd,d1
  7037.  dbra d7,acrossscrngour
  7038.  rts
  7039.  
  7040.  CNOP 0,4
  7041. backbeforegour:
  7042.  and.w #63*256+63,d5
  7043.  move.b (a0,d5.w*4),d0
  7044.  add.l d1,d0
  7045.  bcc.s .nomoreb
  7046.  add.w #256,d0
  7047. .nomoreb:
  7048.  add.w a4,d3
  7049.  move.w (a1,d0.w*2),(a3)
  7050.  addq #4,a3 
  7051.  addx.l d6,d5
  7052.  dbcs d7,acrossscrngour
  7053.  dbcc d7,backbeforegour
  7054.  bra.s past1gour
  7055.  
  7056. acrossscrngour:
  7057.  and.w #63*256+63,d5
  7058.  move.b (a0,d5.w*4),d0
  7059.  add.l d1,d0
  7060.  bcc.s .nomoreb
  7061.  add.w #256,d0
  7062. .nomoreb:
  7063.  add.w a4,d3
  7064.  move.w (a1,d0.w*2),(a3)
  7065.  addq #4,a3
  7066.  addx.l d2,d5
  7067.  dbcs d7,acrossscrngour
  7068.  dbcc d7,backbeforegour
  7069. past1gour:
  7070.  bcc.s gotoacrossgour
  7071.  
  7072.  move.w d4,d7
  7073.  bne.s .notdoneyet
  7074.  move.l d0,leftbright
  7075.  
  7076.  rts
  7077. .notdoneyet:
  7078.  
  7079.  cmp.w #32,d7
  7080.  ble.s .notoowide
  7081.  move.w #32,d7
  7082. .notoowide
  7083.  sub.w d7,d4  
  7084.  addq #4,a3
  7085.  
  7086.  dbra d7,backbeforegour
  7087.  rts
  7088.  
  7089.  
  7090. gotoacrossgour:
  7091.  
  7092.  move.w d4,d7
  7093.  bne.s .notdoneyet
  7094.  rts
  7095. .notdoneyet:
  7096.  
  7097.  cmp.w #32,d7
  7098.  ble.s .notoowide
  7099.  move.w #32,d7
  7100. .notoowide
  7101.  sub.w d7,d4  
  7102.  addq #4,a3
  7103.  
  7104.  dbra d7,acrossscrngour
  7105.  rts
  7106.  
  7107.  
  7108. waterpt: dc.l waterlist
  7109.  
  7110. waterlist:
  7111.  dc.l waterfile
  7112.  dc.l waterfile+2
  7113.  dc.l waterfile+256
  7114.  dc.l waterfile+256+2
  7115.  dc.l waterfile+512
  7116.  dc.l waterfile+512+2
  7117.  dc.l waterfile+768
  7118.  dc.l waterfile+768+2
  7119. ; dc.l waterfile+768
  7120. ; dc.l waterfile+512+2
  7121. ; dc.l waterfile+512
  7122. ; dc.l waterfile+256+2
  7123. ; dc.l waterfile+256
  7124. ; dc.l waterfile+2
  7125. endwaterlist:
  7126.  
  7127. watertouse: dc.l waterfile
  7128.  
  7129. wtan: dc.w 0
  7130. wateroff: dc.w 0
  7131.  
  7132. texturedwater:
  7133.  
  7134.  add.w wateroff,d5
  7135.  
  7136.  move.l #brightentab,a1
  7137.  move.w dst,d0
  7138.  clr.b d0
  7139.  
  7140.  add.w d0,d0
  7141.  cmp.w #12*512,d0
  7142.  blt.s .notoowater
  7143.  move.w #12*512,d0
  7144.  
  7145.  
  7146. .notoowater:
  7147.   
  7148.  adda.w d0,a1
  7149.  
  7150.  move.w dst,d0
  7151.  asl.w #7,d0
  7152.  add.w wtan,d0
  7153.  and.w #8191,d0
  7154.  move.l #SineTable,a0
  7155.  move.w (a0,d0.w),d0
  7156.  ext.l d0
  7157.  
  7158.  move.w dst,d3
  7159.  add.w #300,d3
  7160.  divs d3,d0
  7161.  asr.w #6,d0
  7162.  addq #2,d0
  7163.  cmp.w disttobot,d0
  7164.  blt.s oknotoffbototot
  7165.  
  7166.  move.w disttobot,d0
  7167.  subq #1,d0
  7168.  
  7169. oknotoffbototot
  7170.  
  7171. ; move.w dst,d3
  7172. ; asr.w #7,d3
  7173. ; add.w d3,d0
  7174.  
  7175.  muls #104*4,d0
  7176.  tst.w above
  7177.  beq.s nonnnnneg
  7178.  neg.l d0
  7179.  
  7180. nonnnnneg:
  7181.  
  7182.  move.l d0,a6
  7183.  
  7184.  move.l watertouse,a0
  7185.  
  7186.  move.w startsmoothx,d3
  7187.  dbra d7,acrossscrnw
  7188.  rts
  7189.  
  7190. backbeforew:
  7191.  and.w d1,d5
  7192.  move.w (a0,d5.w*4),d0
  7193.  move.b 1(a3,a6.w),d0
  7194.  move.w (a1,d0.w*2),(a3)
  7195.  addq #4,a3
  7196.  add.w a4,d3
  7197.  addx.l d6,d5
  7198.  dbcs d7,acrossscrnw
  7199.  dbcc d7,backbeforew
  7200.  bcc.s past1w
  7201.  add.w #256,d5 
  7202.  bra.s past1w
  7203.  
  7204. acrossscrnw:
  7205.  and.w d1,d5
  7206.  move.w (a0,d5.w*4),d0
  7207.  move.b 1(a3,a6.w),d0
  7208.  move.w (a1,d0.w*2),(a3)
  7209.  addq #4,a3
  7210.  add.w a4,d3
  7211.  addx.l d2,d5
  7212.  dbcs d7,acrossscrnw
  7213.  dbcc d7,backbeforew
  7214.  bcc.s past1w
  7215.  add.w #256,d5 
  7216. past1w:
  7217.  
  7218.  move.w d4,d7
  7219.  bne.s .notdoneyet
  7220.  rts
  7221. .notdoneyet:
  7222.  
  7223.  cmp.w #32,d7
  7224.  ble.s .notoowide
  7225.  move.w #32,d7
  7226. .notoowide
  7227.  sub.w d7,d4  
  7228.  addq #4,a3
  7229.  
  7230.  dbra d7,acrossscrnw
  7231.  rts
  7232.  
  7233. usewater: dc.w 0
  7234.  dc.w 0
  7235. startsmoothx: dc.w 0
  7236.  dc.w 0
  7237. startsmoothz: dc.w 0
  7238.  
  7239. ********************************
  7240. *
  7241.  include "AB3:source_4000/ObjDraw3.chipram"
  7242. *
  7243. ********************************
  7244.  
  7245. numframes:
  7246.  dc.w 0
  7247.  
  7248. alframe: dc.l 0
  7249.  
  7250. alan:
  7251.  dcb.l 8,0
  7252.  dcb.l 8,1
  7253.  dcb.l 8,2
  7254.  dcb.l 8,3
  7255. endalan:
  7256.  
  7257. alanptr: dc.l alan
  7258.  
  7259. Time2: dc.l 0
  7260. dispco:
  7261.  dc.w 0
  7262.  
  7263.  
  7264. key_interrupt:
  7265.         movem.l    d0-d7/a0-a6,-(sp)
  7266.  
  7267. ;        move.w    INTREQR,d0
  7268. ;        btst    #3,d0
  7269. ;        beq    .not_key
  7270.  
  7271.         move.b    $bfdd00,d0
  7272.         btst    #0,d0
  7273.         bne    .key_cont
  7274. ;        move.b    $bfed01,d0
  7275. ;        btst    #0,d0
  7276. ;        bne    .key_cont
  7277.     
  7278. ;        btst    #3,d0
  7279. ;        beq    .key_cont
  7280.  
  7281.         move.b    $bfec01,d0
  7282.         clr.b    $bfec01
  7283.  
  7284.         tst.b    d0
  7285.         beq    .key_cont
  7286.  
  7287. ;        bset    #6,$bfee01
  7288. ;        move.b    #$f0,$bfe401
  7289. ;        move.b    #$00,$bfe501
  7290. ;        bset    #0,$bfee01
  7291.  
  7292.  
  7293.         not.b    d0
  7294.         ror.b    #1,d0
  7295.         lea.l    KeyMap,a0
  7296.         tst.b    d0
  7297.         bmi.b    .key_up
  7298.         and.w    #$7f,d0
  7299. ;        add.w    #1,d0
  7300.         move.b    #$ff,(a0,d0.w)
  7301.         move.b    d0,lastpressed
  7302.  
  7303.         bra.b    .key_cont2
  7304. .key_up:
  7305.         and.w    #$7f,d0
  7306. ;        add.w    #1,d0
  7307.         move.b    #$00,(a0,d0.w)
  7308.  
  7309. .key_cont2
  7310. ;        btst    #0,$bfed01
  7311. ;        beq    .key_cont2
  7312. ;        move.b    #%00000000,$bfee01
  7313. ;        move.b    #%10001000,$bfed01
  7314.  
  7315. ;alt keys should not be independent so overlay ralt on lalt
  7316.  
  7317.         
  7318. .key_cont
  7319.  
  7320. ;        move.w    #$0008,INTREQ
  7321. .not_key:    ;lea.l    $dff000,a5
  7322.  
  7323. ;        lea.l    _keypressed(pc),a0
  7324. ;        move.b    101(a0),d0    ;read LALT
  7325. ;        or.b    102(a0),d0    ;blend it with RALT
  7326. ;        move.b    d0,127(a0)    ;save in combined position
  7327.  
  7328.         movem.l    (sp)+,d0-d7/a0-a6
  7329.  
  7330.         rts
  7331.  
  7332. lastpressed:    dc.b 0
  7333. KInt_CCode    Ds.b    1
  7334. KInt_Askey    Ds.b    1
  7335. KInt_OCode    Ds.w    1
  7336.  
  7337.  
  7338. OldSpace: dc.b 0
  7339. SpaceTapped: dc.b 0
  7340. PLR1_SPCTAP: dc.b 0
  7341. PLR2_SPCTAP: dc.b 0
  7342. PLR1_Ducked: dc.b 0
  7343. PLR2_Ducked: dc.b 0
  7344.  even
  7345.  
  7346.  include "ab3:source_4000/PLR1CONTROL.s"
  7347.  include "ab3:source_4000/PLR2CONTROL.s"
  7348.  include "ab3:source_4000/FALL.s"
  7349.  
  7350. prot7: dc.w 0
  7351.  
  7352. GOTTOSEND: dc.w 0
  7353.  
  7354. OtherInter:
  7355.  move.w #$0010,$dff000+intreq
  7356.  movem.l d0-d7/a0-a6,-(a7)
  7357.  bra.s justshake
  7358.  
  7359.     cnop 0,4
  7360.  
  7361. Chan0inter:
  7362.  
  7363.     SAVEREGS
  7364.     jsr    .routine
  7365.     GETREGS
  7366.  
  7367. ;    move.w    #1024+'.',$dff030
  7368.     
  7369.     moveq #0,d0
  7370.     rts
  7371.  
  7372. .routine
  7373.  
  7374.     
  7375. ;w move.w #$0010,$dff000+intreq
  7376.  
  7377.  tst.b doanything
  7378.  bne.s dosomething
  7379.  
  7380.  movem.l d0-d7/a0-a6,-(a7)
  7381.  bra JUSTSOUNDS
  7382.  
  7383.  rts
  7384.  
  7385. dosomething:
  7386.  
  7387.  
  7388.  addq.w #1,FramesToDraw
  7389.  movem.l d0-d7/a0-a6,-(a7)
  7390.  
  7391. ; jsr INITREC
  7392. ; jsr RECEIVE
  7393.  
  7394. ; tst.l BUFFER
  7395. ; beq.s justshake
  7396. ; st GOTTOSEND
  7397. ; move.l #OtherInter,$6c
  7398.  
  7399. justshake:
  7400.  
  7401.  cmp.b #'b',Prefsfile+3
  7402.  bne.s .noback
  7403.  jsr mt_music
  7404. .noback:
  7405.  
  7406.  bra dontshowtime
  7407.  
  7408.  tst.b oktodisplay
  7409.  beq dontshowtime
  7410.  clr.b oktodisplay
  7411.  subq.w #1,dispco
  7412.  bgt dontshowtime
  7413.  move.w #10,dispco
  7414.  
  7415.  move.l #TimerScr+10,a0
  7416.  move.l TimeCount,d0
  7417.  bge.s timenotneg
  7418.  move.l #1111*256,d0
  7419. timenotneg:
  7420.  asr.l #8,d0
  7421.  move.l #digits,a1
  7422.  move.w #7,d2
  7423. digitlop
  7424.  divs #10,d0
  7425.  swap d0
  7426.  lea (a1,d0.w*8),a2
  7427.  move.b (a2)+,(a0)
  7428.  move.b (a2)+,24(a0)
  7429.  move.b (a2)+,24*2(a0)
  7430.  move.b (a2)+,24*3(a0)
  7431.  move.b (a2)+,24*4(a0)
  7432.  move.b (a2)+,24*5(a0)
  7433.  move.b (a2)+,24*6(a0)
  7434.  move.b (a2)+,24*7(a0)
  7435.  subq #1,a0
  7436.  swap d0
  7437.  ext.l d0
  7438.  dbra d2,digitlop
  7439.  
  7440.  move.l #TimerScr+10+24*10,a0
  7441.  move.l NumTimes,d0
  7442.  move.l #digits,a1
  7443.  move.w #3,d2
  7444. digitlop2
  7445.  divs #10,d0
  7446.  swap d0
  7447.  lea (a1,d0.w*8),a2
  7448.  move.b (a2)+,(a0)
  7449.  move.b (a2)+,24(a0)
  7450.  move.b (a2)+,24*2(a0)
  7451.  move.b (a2)+,24*3(a0)
  7452.  move.b (a2)+,24*4(a0)
  7453.  move.b (a2)+,24*5(a0)
  7454.  move.b (a2)+,24*6(a0)
  7455.  move.b (a2)+,24*7(a0)
  7456.  subq #1,a0
  7457.  swap d0
  7458.  ext.l d0
  7459.  dbra d2,digitlop2
  7460.  
  7461.  move.l #TimerScr+10+24*20,a0
  7462.  moveq #0,d0
  7463.  move.w FramesToDraw,d0
  7464.  move.l #digits,a1
  7465.  move.w #2,d2
  7466. digitlop3
  7467.  divs #10,d0
  7468.  swap d0
  7469.  lea (a1,d0.w*8),a2
  7470.  move.b (a2)+,(a0)
  7471.  move.b (a2)+,24(a0)
  7472.  move.b (a2)+,24*2(a0)
  7473.  move.b (a2)+,24*3(a0)
  7474.  move.b (a2)+,24*4(a0)
  7475.  move.b (a2)+,24*5(a0)
  7476.  move.b (a2)+,24*6(a0)
  7477.  move.b (a2)+,24*7(a0)
  7478.  subq #1,a0
  7479.  swap d0
  7480.  ext.l d0
  7481.  dbra d2,digitlop3
  7482.  
  7483. dontshowtime:
  7484.  
  7485.  
  7486.  move.l alanptr,a0
  7487.  move.l (a0)+,alframe
  7488.  cmp.l #endalan,a0
  7489.  blt.s nostartalan
  7490.  move.l #alan,a0
  7491. nostartalan:
  7492.  move.l a0,alanptr
  7493.  
  7494.  
  7495.  tst.b READCONTROLS
  7496.  beq.s nocontrols
  7497.  
  7498.  cmp.b #'s',mors
  7499.  beq.s control2
  7500.  
  7501.  tst.b PLR1MOUSE
  7502.  beq.s PLR1_nomouse
  7503.  bsr PLR1_mouse_control
  7504. PLR1_nomouse:
  7505.  tst.b PLR1KEYS
  7506.  beq.s PLR1_nokeys
  7507.  bsr PLR1_keyboard_control
  7508. PLR1_nokeys:
  7509. ; tst.b PLR1PATH
  7510. ; beq.s PLR1_nopath
  7511. ; bsr PLR1_follow_path
  7512. ;PLR1_nopath:
  7513.  tst.b PLR1JOY
  7514.  beq.s PLR1_nojoy
  7515.  bsr PLR1_JoyStick_control
  7516. PLR1_nojoy: 
  7517.  bra.s nocontrols
  7518.  
  7519. control2:
  7520.  tst.b PLR2MOUSE
  7521.  beq.s PLR2_nomouse
  7522.  bsr PLR2_mouse_control
  7523. PLR2_nomouse:
  7524.  tst.b PLR2KEYS
  7525.  beq.s PLR2_nokeys
  7526.  bsr PLR2_keyboard_control
  7527. PLR2_nokeys:
  7528. ; tst.b PLR2PATH
  7529. ; beq.s PLR2_nopath
  7530. ; bsr PLR1_follow_path
  7531. ;PLR2_nopath:
  7532.  tst.b PLR2JOY
  7533.  beq.s PLR2_nojoy
  7534.  bsr PLR2_JoyStick_control
  7535. PLR2_nojoy: 
  7536.  
  7537.  
  7538. nocontrols:
  7539.  
  7540.  move.l #$dff000,a6
  7541.  
  7542.  cmp.b #'4',Prefsfile+1
  7543.  bne.s nomuckabout
  7544.  
  7545.  move.w #$0,d0 
  7546.  tst.b NoiseMade0LEFT
  7547.  beq.s noturnoff0
  7548.  move.w #1,d0
  7549. noturnoff0:
  7550.  tst.b NoiseMade0RIGHT
  7551.  beq.s noturnoff1
  7552.  or.w #2,d0
  7553. noturnoff1:
  7554.  tst.b NoiseMade1RIGHT
  7555.  beq.s noturnoff2
  7556.  or.w #4,d0
  7557. noturnoff2:
  7558.  tst.b NoiseMade1LEFT
  7559.  beq.s noturnoff3
  7560.  or.w #8,d0
  7561. noturnoff3:
  7562.     move.w d0,dmacon(a6)
  7563.  
  7564. nomuckabout:
  7565.  
  7566.  
  7567. ; tst.b PLR2_fire
  7568. ; beq.s firenotpressed2
  7569. ; fire was pressed last time.
  7570. ; btst #7,$bfe001
  7571. ; bne.s firenownotpressed2
  7572. ; fire is still pressed this time.
  7573. ; st PLR2_fire
  7574. ; bra dointer
  7575.  
  7576. firenownotpressed2:
  7577. ; fire has been released.
  7578. ; clr.b PLR2_fire
  7579. ; bra dointer
  7580.  
  7581. firenotpressed2
  7582.  
  7583. ; fire was not pressed last frame...
  7584.  
  7585. ; btst #7,$bfe001
  7586. ; if it has still not been pressed, go back above
  7587. ; bne.s firenownotpressed2
  7588. ; fire was not pressed last time, and was this time, so has
  7589. ; been clicked.
  7590. ; st PLR2_clicked
  7591. ; st PLR2_fire
  7592.  
  7593. dointer
  7594.  
  7595. JUSTSOUNDS:
  7596.  
  7597.  tst.b dosounds
  7598.  beq.s .notthing
  7599.  
  7600.  cmp.b #'4',Prefsfile+1
  7601.     beq fourchannel
  7602.  
  7603.  btst #1,$dff000+intreqr
  7604.     bne.s newsampbitl
  7605.  
  7606. .notthing:
  7607.  
  7608.  movem.l (a7)+,d0-d7/a0-a6
  7609.  
  7610.  moveq #0,d0
  7611.  rts
  7612.  
  7613.  
  7614. dosounds: dc.w 0
  7615.  
  7616. swappedem: dc.w 0
  7617.  
  7618. newsampbitl:
  7619.  
  7620.  move.w #$820f,$dff000+dmacon
  7621.  
  7622.  move.w #$200,$dff000+intreq
  7623.  
  7624. ; tst.b CHANNELDATA
  7625. ; bne nochannel0
  7626.  
  7627.  move.l pos0LEFT,a0
  7628.  move.l pos2LEFT,a1
  7629.  
  7630.  move.l #tab,a2
  7631.  
  7632.  moveq #0,d0
  7633.  moveq #0,d1
  7634.  move.b vol0left,d0
  7635.  move.b vol2left,d1
  7636.  cmp.b d1,d0
  7637.  slt swappedem
  7638.  bge.s fbig0
  7639.  
  7640. ; d1 is bigger so scale d0 and use d1
  7641. ; as audiochannel volume.
  7642.  
  7643.  exg a0,a1
  7644.  asl.w #6,d0
  7645.  divs d1,d0
  7646.  lsl.w #8,d0
  7647.  adda.w d0,a2
  7648.  move.w d1,$dff0a8
  7649.  bra.s donechan0
  7650.  
  7651. fbig0:
  7652.  tst.w d0
  7653.  beq.s donechan0
  7654.  asl.w #6,d1
  7655.  divs d0,d1
  7656.  lsl.w #8,d1
  7657.  adda.w d1,a2
  7658.  move.w d0,$dff0a8
  7659.  
  7660. donechan0:
  7661.  
  7662.  move.l Aupt0,a3
  7663.  move.l a3,$dff0a0
  7664.  move.l Auback0,Aupt0
  7665.  move.l a3,Auback0
  7666.  
  7667.  move.l Auback0,a3
  7668.  
  7669.  moveq #0,d0
  7670.  moveq #0,d1
  7671.  moveq #0,d2
  7672.  moveq #0,d3
  7673.  moveq #0,d4
  7674.  moveq #0,d5
  7675.  move.w #49,d7
  7676. loop:
  7677.  move.l (a0)+,d0
  7678.  move.b (a1)+,d1
  7679.  move.b (a1)+,d2
  7680.  move.b (a1)+,d3
  7681.  move.b (a1)+,d4
  7682.  move.b (a2,d3.w),d5
  7683.  swap d5
  7684.  move.b (a2,d1.w),d5
  7685.  asl.l #8,d5
  7686.  move.b (a2,d2.w),d5
  7687.  swap d5
  7688.  move.b (a2,d4.w),d5
  7689.  add.l d5,d0
  7690.  move.l d0,(a3)+
  7691.  dbra d7,loop
  7692.  
  7693.  tst.b swappedem
  7694.  beq.s .ok23
  7695.  exg a0,a1
  7696. .ok23:
  7697.  
  7698.  cmp.l Samp0endLEFT,a0
  7699.  blt.s .notoffendsamp1
  7700.  move.l #empty,a0
  7701.  move.l #emptyend,Samp0endLEFT
  7702.  move.b #0,vol0left
  7703.  st LEFTCHANDATA+1
  7704.  move.w #0,LEFTCHANDATA+2
  7705. .notoffendsamp1:
  7706.  
  7707.  cmp.l Samp2endLEFT,a1
  7708.  blt.s .notoffendsamp2
  7709.  move.l #empty,a1
  7710.  move.l #emptyend,Samp2endLEFT
  7711.  move.b #0,vol2left
  7712.  st LEFTCHANDATA+1+8
  7713.  move.w #0,LEFTCHANDATA+2+8
  7714. .notoffendsamp2:
  7715.  
  7716.  move.l a0,pos0LEFT
  7717.  move.l a1,pos2LEFT
  7718.  
  7719. nochannel0:
  7720.  
  7721.  tst.b CHANNELDATA+16
  7722.  bne nochannel1
  7723.  
  7724.  
  7725.  move.l pos0RIGHT,a0
  7726.  move.l pos2RIGHT,a1
  7727.  
  7728.  move.l Aupt1,a3
  7729.  move.l a3,$dff0b0
  7730.  move.l Auback1,Aupt1
  7731.  move.l a3,Auback1
  7732.  
  7733.  move.l #tab,a2
  7734.  
  7735.  moveq #0,d0
  7736.  moveq #0,d1
  7737.  move.b vol0right,d0
  7738.  move.b vol2right,d1
  7739.  cmp.b d1,d0
  7740.  slt swappedem
  7741.  bge.s fbig1
  7742.  
  7743. ; d1 is bigger so scale d0 and use d1
  7744. ; as audiochannel volume.
  7745.  
  7746.  exg a0,a1
  7747.  asl.w #6,d0
  7748.  divs d1,d0
  7749.  lsl.w #8,d0
  7750.  adda.w d0,a2
  7751.  move.w d1,$dff0b8
  7752.  bra.s donechan1
  7753.  
  7754. fbig1:
  7755.  tst.w d0
  7756.  beq.s donechan1
  7757.  asl.w #6,d1
  7758.  divs d0,d1
  7759.  lsl.w #8,d1
  7760.  adda.w d1,a2
  7761.  move.w d0,$dff0b8
  7762.  
  7763. donechan1:
  7764.  moveq #0,d0
  7765.  moveq #0,d1
  7766.  moveq #0,d2
  7767.  moveq #0,d3
  7768.  moveq #0,d4
  7769.  moveq #0,d5
  7770.  move.w #49,d7
  7771. loop2:
  7772.  move.l (a0)+,d0
  7773.  move.b (a1)+,d1
  7774.  move.b (a1)+,d2
  7775.  move.b (a1)+,d3
  7776.  move.b (a1)+,d4
  7777.  move.b (a2,d3.w),d5
  7778.  swap d5
  7779.  move.b (a2,d1.w),d5
  7780.  asl.l #8,d5
  7781.  move.b (a2,d2.w),d5
  7782.  swap d5
  7783.  move.b (a2,d4.w),d5
  7784.  add.l d5,d0
  7785.  move.l d0,(a3)+
  7786.  dbra d7,loop2
  7787.  
  7788.  tst.b swappedem
  7789.  beq.s ok01
  7790.  exg a0,a1
  7791. ok01:
  7792.  
  7793.  cmp.l Samp0endRIGHT,a0
  7794.  blt.s .notoffendsamp1
  7795.  move.l #empty,a0
  7796.  move.l #emptyend,Samp0endRIGHT
  7797.  move.b #0,vol0right
  7798.  st RIGHTCHANDATA+1
  7799.  move.w #0,RIGHTCHANDATA+2
  7800. .notoffendsamp1:
  7801.  
  7802.  cmp.l Samp2endRIGHT,a1
  7803.  blt.s .notoffendsamp2
  7804.  move.l #empty,a1
  7805.  move.l #emptyend,Samp2endRIGHT
  7806.  move.b #0,vol2right
  7807.  st RIGHTCHANDATA+1+8
  7808.  move.w #0,RIGHTCHANDATA+2+8
  7809. .notoffendsamp2:
  7810.  
  7811.  move.l a0,pos0RIGHT
  7812.  move.l a1,pos2RIGHT
  7813.  
  7814. nochannel1:
  7815.  
  7816. ******************* Other two channels
  7817.  
  7818.  move.l pos1LEFT,a0
  7819.  move.l pos3LEFT,a1
  7820.  
  7821.  move.l #tab,a2
  7822.  
  7823.  moveq #0,d0
  7824.  moveq #0,d1
  7825.  move.b vol1left,d0
  7826.  move.b vol3left,d1
  7827.  cmp.b d1,d0
  7828.  slt swappedem
  7829.  bge.s fbig2
  7830.  
  7831. ; d1 is bigger so scale d0 and use d1
  7832. ; as audiochannel volume.
  7833.  
  7834.  exg a0,a1
  7835.  asl.w #6,d0
  7836.  divs d1,d0
  7837.  lsl.w #8,d0
  7838.  adda.w d0,a2
  7839.  move.w d1,$dff0d8
  7840.  bra.s donechan2
  7841.  
  7842. fbig2:
  7843.  tst.w d0
  7844.  beq.s donechan2
  7845.  asl.w #6,d1
  7846.  divs d0,d1
  7847.  lsl.w #8,d1
  7848.  adda.w d1,a2
  7849.  move.w d0,$dff0d8
  7850.  
  7851. donechan2:
  7852.  
  7853.  move.l Aupt2,a3
  7854.  move.l a3,$dff0d0
  7855.  move.l Auback2,Aupt2
  7856.  move.l a3,Auback2
  7857.  
  7858.  moveq #0,d0
  7859.  moveq #0,d1
  7860.  moveq #0,d2
  7861.  moveq #0,d3
  7862.  moveq #0,d4
  7863.  moveq #0,d5
  7864.  move.w #49,d7
  7865. loop3:
  7866.  move.l (a0)+,d0
  7867.  move.b (a1)+,d1
  7868.  move.b (a1)+,d2
  7869.  move.b (a1)+,d3
  7870.  move.b (a1)+,d4
  7871.  move.b (a2,d3.w),d5
  7872.  swap d5
  7873.  move.b (a2,d1.w),d5
  7874.  asl.l #8,d5
  7875.  move.b (a2,d2.w),d5
  7876.  swap d5
  7877.  move.b (a2,d4.w),d5
  7878.  add.l d5,d0
  7879.  move.l d0,(a3)+
  7880.  dbra d7,loop3
  7881.  
  7882.  tst.b swappedem
  7883.  beq.s .ok23
  7884.  exg a0,a1
  7885. .ok23:
  7886.  
  7887.  cmp.l Samp1endLEFT,a0
  7888.  blt.s .notoffendsamp3
  7889.  move.l #empty,a0
  7890.  move.l #emptyend,Samp1endLEFT
  7891.  move.b #0,vol1left
  7892.  st LEFTCHANDATA+1+4
  7893.  move.w #0,LEFTCHANDATA+2+4
  7894. .notoffendsamp3:
  7895.  
  7896.  cmp.l Samp3endLEFT,a1
  7897.  blt.s .notoffendsamp4
  7898.  move.l #empty,a1
  7899.  move.l #emptyend,Samp3endLEFT
  7900.  move.b #0,vol3left
  7901.  st LEFTCHANDATA+1+12
  7902.  move.w #0,LEFTCHANDATA+2+12
  7903. .notoffendsamp4:
  7904.  
  7905.  move.l a0,pos1LEFT
  7906.  move.l a1,pos3LEFT
  7907.  
  7908.  move.l pos1RIGHT,a0
  7909.  move.l pos3RIGHT,a1
  7910.  
  7911.  move.l Aupt3,a3
  7912.  move.l a3,$dff0c0
  7913.  move.l Auback3,Aupt3
  7914.  move.l a3,Auback3
  7915.  
  7916.  move.l #tab,a2
  7917.  
  7918.  moveq #0,d0
  7919.  moveq #0,d1
  7920.  move.b vol1right,d0
  7921.  move.b vol3right,d1
  7922.  cmp.b d1,d0
  7923.  slt.s swappedem
  7924.  bge.s fbig3
  7925.  
  7926.  exg a0,a1
  7927.  asl.w #6,d0
  7928.  divs d1,d0
  7929.  lsl.w #8,d0
  7930.  adda.w d0,a2
  7931.  move.w d1,$dff0c8
  7932.  bra.s donechan3
  7933.  
  7934. fbig3:
  7935.  tst.w d0
  7936.  beq.s donechan3
  7937.  asl.w #6,d1
  7938.  divs d0,d1
  7939.  lsl.w #8,d1
  7940.  adda.w d1,a2
  7941.  move.w d0,$dff0c8
  7942. donechan3:
  7943.  
  7944.  moveq #0,d0
  7945.  moveq #0,d1
  7946.  moveq #0,d2
  7947.  moveq #0,d3
  7948.  moveq #0,d4
  7949.  moveq #0,d5
  7950.  move.w #49,d7
  7951. loop4:
  7952.  move.l (a0)+,d0
  7953.  move.b (a1)+,d1
  7954.  move.b (a1)+,d2
  7955.  move.b (a1)+,d3
  7956.  move.b (a1)+,d4
  7957.  move.b (a2,d3.w),d5
  7958.  swap d5
  7959.  move.b (a2,d1.w),d5
  7960.  asl.l #8,d5
  7961.  move.b (a2,d2.w),d5
  7962.  swap d5
  7963.  move.b (a2,d4.w),d5
  7964.  add.l d5,d0
  7965.  move.l d0,(a3)+
  7966.  dbra d7,loop4
  7967.  
  7968.  tst.b swappedem
  7969.  beq.s .ok23
  7970.  exg a0,a1
  7971. .ok23:
  7972.  
  7973.  cmp.l Samp1endRIGHT,a0
  7974.  blt.s notoffendsamp3
  7975.  move.l #empty,a0
  7976.  move.l #emptyend,Samp1endRIGHT
  7977.  move.b #0,vol1right
  7978.  st RIGHTCHANDATA+1+4
  7979.  move.w #0,RIGHTCHANDATA+2+4
  7980. notoffendsamp3:
  7981.  
  7982.  cmp.l Samp3endRIGHT,a1
  7983.  blt.s notoffendsamp4
  7984.  move.l #empty,a1
  7985.  move.l #emptyend,Samp3endRIGHT
  7986.  move.b #0,vol3right
  7987.  st RIGHTCHANDATA+1+12
  7988.  move.w #0,RIGHTCHANDATA+2+12
  7989. notoffendsamp4:
  7990.  
  7991.  move.l a0,pos1RIGHT
  7992.  move.l a1,pos3RIGHT
  7993.  
  7994.  movem.l (a7)+,d0-d7/a0-a6
  7995.  tst.b counting
  7996.  beq .nostartcounter
  7997.  JSR STARTCOUNT
  7998. .nostartcounter:
  7999.  
  8000.  moveq #0,d0
  8001.  rts
  8002.  
  8003. ***********************************
  8004. * 4 channel sound routine
  8005. ***********************************
  8006.  
  8007. fourchannel:
  8008.  
  8009.  move.l #$dff000,a6
  8010.  
  8011.  btst #7,intreqrl(a6)
  8012.  beq.s nofinish0
  8013. ; move.w #0,LEFTCHANDATA+2
  8014. ; st LEFTCHANDATA+1
  8015.  move.l #null,$a0(a6)
  8016.  move.w #100,$a4(a6) 
  8017.  move.w #$0080,intreq(a6)
  8018. nofinish0:
  8019.  
  8020.  tst.b NoiseMade0pLEFT
  8021.  beq.s NoChan0sound
  8022.  
  8023.  move.l Samp0endLEFT,d0
  8024.  move.l pos0LEFT,d1
  8025.  sub.l d1,d0
  8026.  lsr.l #1,d0
  8027.  move.w d0,$a4(a6)
  8028.  move.l d1,$a0(a6)
  8029.  move.w #$8201,dmacon(a6)
  8030.  moveq #0,d0
  8031.  move.b vol0left,d0
  8032.  move.w d0,$a8(a6)
  8033.  
  8034. NoChan0sound:
  8035.  
  8036. *****************************************
  8037. *****************************************
  8038.  
  8039.  btst #0,intreqr(a6)
  8040.  beq.s nofinish1
  8041.  move.l #null,$b0(a6)
  8042.  move.w #100,$b4(a6)
  8043.  move.w #$0100,intreq(a6)
  8044. nofinish1:
  8045.  
  8046.  tst.b NoiseMade0pRIGHT
  8047.  beq.s NoChan1sound
  8048.  
  8049.  move.l Samp0endRIGHT,d0
  8050.  move.l pos0RIGHT,d1
  8051.  sub.l d1,d0
  8052.  lsr.l #1,d0
  8053.  move.w d0,$b4(a6)
  8054.  move.l d1,$b0(a6)
  8055.  move.w d0,playnull1
  8056.  move.w #$8202,dmacon(a6)
  8057.  moveq #0,d0
  8058.  move.b vol0right,d0
  8059.  move.w d0,$b8(a6)
  8060.  
  8061. NoChan1sound:
  8062.  
  8063. *****************************************
  8064. *****************************************
  8065.  
  8066.  btst #1,intreqr(a6)
  8067.  beq.s nofinish2
  8068.  move.l #null,$c0(a6)
  8069.  move.w #100,$c4(a6)
  8070.  move.w #$0200,intreq(a6)
  8071. nofinish2:
  8072.  
  8073.  tst.b NoiseMade1pRIGHT
  8074.  beq.s NoChan2sound
  8075.  
  8076.  move.l Samp1endRIGHT,d0
  8077.  move.l pos1RIGHT,d1
  8078.  sub.l d1,d0
  8079.  lsr.l #1,d0
  8080.  move.w d0,$c4(a6)
  8081.  move.w d0,playnull2
  8082.  
  8083.  move.l d1,$c0(a6)
  8084.  move.w #$8204,dmacon(a6)
  8085.  moveq #0,d0
  8086.  move.b vol1right,d0
  8087.  move.w d0,$c8(a6)
  8088.  
  8089. NoChan2sound:
  8090.  
  8091. *****************************************
  8092. *****************************************
  8093.  
  8094.  btst #2,intreqr(a6)
  8095.  beq.s nofinish3
  8096.  move.l #null,$d0(a6)
  8097.  move.w #100,$d4(a6)
  8098.  move.w #$0400,intreq(a6)
  8099. nofinish3:
  8100.  
  8101.  tst.b NoiseMade1pLEFT
  8102.  beq.s NoChan3sound
  8103.  
  8104.  move.l Samp1endLEFT,d0
  8105.  move.l pos1LEFT,d1
  8106.  sub.l d1,d0
  8107.  lsr.l #1,d0
  8108.  move.w d0,$d4(a6)
  8109.  move.w d0,playnull3
  8110.  move.l d1,$d0(a6)
  8111.  move.w #$8208,dmacon(a6)
  8112.  moveq #0,d0
  8113.  move.b vol1left,d0
  8114.  move.w d0,$d8(a6)
  8115.  
  8116. NoChan3sound:
  8117.  
  8118. nomorechannels:
  8119.  
  8120.  move.l NoiseMade0LEFT,NoiseMade0pLEFT
  8121.  move.l #0,NoiseMade0LEFT
  8122.  move.l NoiseMade0RIGHT,NoiseMade0pRIGHT
  8123.  move.l #0,NoiseMade0RIGHT
  8124.  
  8125. ; tst.b playnull0
  8126. ; beq.s .nnul
  8127. ; sub.b #1,playnull0
  8128. ; bra.s chan0still
  8129. ;.nnul:
  8130. ;chan0still:
  8131.  
  8132.  tst.b NoiseMade0pLEFT
  8133.  bne.s chan0still
  8134.  tst.w playnull0
  8135.  beq.s nnul0
  8136.  sub.w #100,playnull0
  8137.  bra.s chan0still
  8138. nnul0:
  8139.  move.w #0,LEFTCHANDATA+2
  8140.  st LEFTCHANDATA+1
  8141. chan0still:
  8142.  
  8143.  tst.b NoiseMade0pRIGHT
  8144.  bne.s chan1still
  8145.  tst.w playnull1
  8146.  beq.s nnul1
  8147.  sub.w #100,playnull1
  8148.  bra.s chan1still
  8149. nnul1:
  8150.  move.w #0,RIGHTCHANDATA+2
  8151.  st RIGHTCHANDATA+1
  8152. chan1still:
  8153.  
  8154.  tst.b NoiseMade1pRIGHT
  8155.  bne.s chan2still
  8156.  tst.w playnull2
  8157.  beq.s nnul2
  8158.  sub.w #100,playnull2
  8159.  bra.s chan2still
  8160. nnul2:
  8161.  move.w #0,RIGHTCHANDATA+2+4
  8162.  st RIGHTCHANDATA+1+4
  8163. chan2still:
  8164.  
  8165.  tst.b NoiseMade1pLEFT
  8166.  bne.s chan3still
  8167.  tst.w playnull3
  8168.  beq.s nnul3
  8169.  sub.w #100,playnull3
  8170.  bra.s chan3still
  8171. nnul3:
  8172.  move.w #0,LEFTCHANDATA+2+4
  8173.  st LEFTCHANDATA+1+4
  8174.  
  8175. chan3still:
  8176.  
  8177.  
  8178.  movem.l (a7)+,d0-d7/a0-a6
  8179.  
  8180.  moveq #0,d0
  8181.  rts
  8182.  
  8183. backbeat: dc.w 0
  8184.  
  8185. playnull0: dc.w 0
  8186. playnull1: dc.w 0
  8187. playnull2: dc.w 0
  8188. playnull3: dc.w 0
  8189.  
  8190. Samp0endRIGHT: dc.l emptyend
  8191. Samp1endRIGHT: dc.l emptyend
  8192. Samp2endRIGHT: dc.l emptyend
  8193. Samp3endRIGHT: dc.l emptyend
  8194. Samp0endLEFT: dc.l emptyend
  8195. Samp1endLEFT: dc.l emptyend
  8196. Samp2endLEFT: dc.l emptyend
  8197. Samp3endLEFT: dc.l emptyend
  8198.  
  8199. Aupt0: dc.l null
  8200. Auback0: dc.l null+500
  8201. Aupt2: dc.l null3
  8202. Auback2: dc.l null3+500
  8203. Aupt3: dc.l null4
  8204. Auback3: dc.l null4+500
  8205. Aupt1: dc.l null2
  8206. Auback1: dc.l null2+500
  8207.  
  8208. NoiseMade0LEFT: dc.b 0
  8209. NoiseMade1LEFT: dc.b 0
  8210. NoiseMade2LEFT: dc.b 0
  8211. NoiseMade3LEFT: dc.b 0
  8212. NoiseMade0pLEFT: dc.b 0
  8213. NoiseMade1pLEFT: dc.b 0
  8214. NoiseMade2pLEFT: dc.b 0
  8215. NoiseMade3pLEFT: dc.b 0
  8216. NoiseMade0RIGHT: dc.b 0
  8217. NoiseMade1RIGHT: dc.b 0
  8218. NoiseMade2RIGHT: dc.b 0
  8219. NoiseMade3RIGHT: dc.b 0
  8220. NoiseMade0pRIGHT: dc.b 0
  8221. NoiseMade1pRIGHT: dc.b 0
  8222. NoiseMade2pRIGHT: dc.b 0
  8223. NoiseMade3pRIGHT: dc.b 0
  8224.  
  8225. empty: ds.l 100
  8226. emptyend:
  8227.  
  8228. **************************************
  8229. * I want a routine to calculate all the
  8230. * info needed for the sound player to
  8231. * work, given say position of noise, volume
  8232. * and sample number.
  8233.  
  8234. Samplenum: dc.w 0
  8235. Noisex: dc.w 0
  8236. Noisez: dc.w 0
  8237. Noisevol: dc.w 0
  8238. chanpick: dc.w 0
  8239. IDNUM: dc.w 0
  8240. needleft: dc.b 0
  8241. needright: dc.b 0
  8242. STEREO: dc.b $0
  8243. even
  8244. prot6: dc.w 0
  8245.  
  8246.  even
  8247.  
  8248. CHANNELDATA:
  8249. LEFTCHANDATA:
  8250.  dc.l $00000000
  8251.  dc.l $00000000
  8252.  dc.l $FF000000
  8253.  dc.l $FF000000
  8254. RIGHTCHANDATA:
  8255.  dc.l $00000000
  8256.  dc.l $00000000
  8257.  dc.l $FF000000
  8258.  dc.l $FF000000
  8259.  
  8260. RIGHTPLAYEDTAB: ds.l 20
  8261. LEFTPLAYEDTAB: ds.l 20
  8262.  
  8263. MakeSomeNoise:
  8264.  
  8265. ; Plan for new sound handler:
  8266. ; It is sent a sample number,
  8267. ; a position relative to the
  8268. ; player, an id number and a volume.
  8269. ; Also notifplaying.
  8270.  
  8271. ; indirect inputs are the available
  8272. ; channel flags and whether or not
  8273. ; stereo sound is selected.
  8274.  
  8275. ; the algorithm must decide
  8276. ; whether the new sound is more
  8277. ; important than the ones already
  8278. ; playing. Thus an 'importance'
  8279. ; must be calculated, probably
  8280. ; using volume.
  8281.  
  8282. ; The output needs to be:
  8283.  
  8284. ; Write the pointers and volumes of
  8285. ; the sound channels
  8286.  
  8287.  
  8288.  tst.b notifplaying
  8289.  beq.s dontworry
  8290.  
  8291. ; find if we are already playing
  8292.  
  8293.  move.b IDNUM,d0
  8294.  move.w #7,d1
  8295.  lea CHANNELDATA,a3
  8296. findsameasme
  8297.  tst.b (a3)
  8298.  bne.s notavail
  8299.  cmp.b 1(a3),d0
  8300.  beq SameAsMe
  8301. notavail:
  8302.  add.w #4,a3
  8303.  dbra d1,findsameasme
  8304.  bra dontworry
  8305. SameAsMe
  8306.  rts
  8307.  
  8308. noiseloud: dc.w 0
  8309.  
  8310. dontworry:
  8311.  
  8312. ; Ok its fine for us to play a sound.
  8313. ; So calculate left/right volume.
  8314.  
  8315.  move.w Noisex,d1
  8316.  muls d1,d1
  8317.  move.w Noisez,d2
  8318.  muls d2,d2
  8319.  move.w #64,d3
  8320.  move.w #32767,noiseloud
  8321.  moveq #1,d0
  8322.  add.l d1,d2
  8323.  beq pastcalc
  8324.  
  8325.  move.w #31,d0
  8326. .findhigh
  8327.  btst d0,d2
  8328.  bne .foundhigh
  8329.  dbra d0,.findhigh
  8330. .foundhigh
  8331.  asr.w #1,d0
  8332.  clr.l d3
  8333.  bset d0,d3
  8334.  move.l d3,d0
  8335.  
  8336.  move.w d0,d3
  8337.  muls d3,d3    ; x*x
  8338.  sub.l d2,d3    ; x*x-a
  8339.  asr.l #1,d3    ; (x*x-a)/2
  8340.  divs d0,d3    ; (x*x-a)/2x
  8341.  sub.w d3,d0    ; second approx
  8342.  bgt .stillnot0
  8343.  move.w #1,d0
  8344. .stillnot0
  8345.  
  8346.  move.w d0,d3
  8347.  muls d3,d3
  8348.  sub.l d2,d3
  8349.  asr.l #1,d3
  8350.  divs d0,d3
  8351.  sub.w d3,d0    ; second approx
  8352.  bgt .stillnot02
  8353.  move.w #1,d0
  8354. .stillnot02
  8355.  
  8356.  move.w Noisevol,d3
  8357.  ext.l d3
  8358.  asl.l #6,d3
  8359.  cmp.l #32767,d3
  8360.  ble.s .nnnn
  8361.  move.l #32767,d3
  8362. .nnnn
  8363.  
  8364.  asr.w #2,d0
  8365.  addq #1,d0
  8366.  divs d0,d3
  8367.  
  8368.  move.w d3,noiseloud
  8369.  
  8370.  cmp.w #64,d3
  8371.  ble.s notooloud
  8372.  move.w #64,d3
  8373. notooloud:
  8374.  
  8375. pastcalc:
  8376.  
  8377.     ; d3 contains volume of noise.
  8378.     
  8379.  move.w d3,d4
  8380.  tst.b STEREO
  8381.  beq NOSTEREO
  8382.  
  8383.  move.w d3,d2
  8384.  muls Noisex,d2
  8385.  asl.w #2,d0
  8386.  divs d0,d2
  8387.  
  8388.  bgt.s quietleft
  8389.  add.w d2,d4
  8390.  bge.s donequiet
  8391.  move.w #0,d4
  8392.  bra.s donequiet
  8393. quietleft:
  8394.  sub.w d2,d3
  8395.  bge.s donequiet
  8396.  move.w #0,d3
  8397. donequiet:
  8398.  
  8399. ; d3=leftvol?
  8400. ; d4=rightvol?
  8401.  
  8402.  clr.w needleft
  8403.  
  8404.  cmp.b d3,d4
  8405.  bgt.s RightLouder
  8406.  
  8407. ; Left is louder; is it MUCH louder?
  8408.  
  8409.  st needleft
  8410.  move.w d3,d2
  8411.  sub.w d4,d2
  8412.  cmp.w #32,d2
  8413.  slt needright
  8414.  bra aboutsame
  8415.  
  8416. RightLouder:
  8417.  st needright
  8418.  move.w d4,d2
  8419.  sub.w d3,d2
  8420.  cmp.w #32,d2
  8421.  slt needleft
  8422.  
  8423. aboutsame:
  8424.  
  8425.  
  8426. ; Find least important sound on left
  8427.  
  8428.  move.l #0,a2
  8429.  move.l #0,d5
  8430.  move.w #32767,d2
  8431.  move.b IDNUM,d0
  8432.  lea LEFTCHANDATA,a3
  8433.  move.w #3,d1
  8434. FindLeftChannel
  8435.  tst.b (a3)
  8436.  bne.s .notactive
  8437.  cmp.b 1(a3),d0
  8438.  beq.s FOUNDLEFT
  8439.  cmp.w 2(a3),d2
  8440.  blt.s .notactive
  8441.  move.w 2(a3),d2
  8442.  move.l a3,a2
  8443.  move.w d5,d6
  8444.  
  8445. .notactive:
  8446.  add.w #4,a3
  8447.  add.w #1,d5
  8448.  dbra d1,FindLeftChannel
  8449.  move.l a2,a3
  8450.  bra.s gopastleft
  8451. FOUNDLEFT:
  8452.  move.w d5,d6
  8453. gopastleft:
  8454.  tst.l a3
  8455.  bne.s FOUNDALEFT
  8456.  rts
  8457. FOUNDALEFT:
  8458.  
  8459. ; d6 = channel number
  8460.  move.b d0,1(a3)
  8461.  move.w d3,2(a3)
  8462.  
  8463.  move.w Samplenum,d5
  8464.  move.l #SampleList,a3
  8465.  move.l (a3,d5.w*8),a1
  8466.  move.l 4(a3,d5.w*8),a2
  8467.  
  8468.  tst.b d6
  8469.  seq NoiseMade0LEFT
  8470.  beq.s .chan0
  8471.  cmp.b #2,d6
  8472.  slt NoiseMade1LEFT
  8473.  blt .chan1
  8474.  seq NoiseMade2LEFT
  8475.  beq .chan2
  8476.  st NoiseMade3LEFT
  8477.  
  8478.  move.b d5,LEFTPLAYEDTAB+9
  8479.  move.b d3,LEFTPLAYEDTAB+1+9
  8480.  move.b d4,LEFTPLAYEDTAB+2+9
  8481.  move.b d3,vol3left
  8482.  move.l a1,pos3LEFT
  8483.  move.l a2,Samp3endLEFT
  8484.  bra dorightchan
  8485.  
  8486. .chan0: 
  8487.  move.b d5,LEFTPLAYEDTAB
  8488.  move.b d3,LEFTPLAYEDTAB+1
  8489.  move.b d4,LEFTPLAYEDTAB+2
  8490.  move.l a1,pos0LEFT
  8491.  move.l a2,Samp0endLEFT
  8492.  move.b d3,vol0left
  8493.  bra dorightchan
  8494.  
  8495. .chan1:
  8496.  move.b d5,LEFTPLAYEDTAB+3
  8497.  move.b d3,LEFTPLAYEDTAB+1+3
  8498.  move.b d4,LEFTPLAYEDTAB+2+3
  8499.  move.b d3,vol1left
  8500.  move.l a1,pos1LEFT
  8501.  move.l a2,Samp1endLEFT
  8502.  bra dorightchan
  8503.  
  8504. .chan2: 
  8505.  move.b d5,LEFTPLAYEDTAB+6
  8506.  move.b d3,LEFTPLAYEDTAB+1+6
  8507.  move.b d4,LEFTPLAYEDTAB+2+6
  8508.  move.l a1,pos2LEFT
  8509.  move.l a2,Samp2endLEFT
  8510.  move.b d3,vol2left
  8511.  
  8512. dorightchan:
  8513.  
  8514. ; Find least important sound on right
  8515.  
  8516.  move.l #0,a2
  8517.  move.l #0,d5
  8518.  move.w #10000,d2
  8519.  move.b IDNUM,d0
  8520.  lea RIGHTCHANDATA,a3
  8521.  move.w #3,d1
  8522. FindRightChannel
  8523.  tst.b (a3)
  8524.  bne.s .notactive
  8525.  cmp.b 1(a3),d0
  8526.  beq.s FOUNDRIGHT
  8527.  cmp.w 2(a3),d2
  8528.  blt.s .notactive
  8529.  move.w 2(a3),d2
  8530.  move.l a3,a2
  8531.  move.w d5,d6
  8532.  
  8533. .notactive:
  8534.  add.w #4,a3
  8535.  add.w #1,d5
  8536.  dbra d1,FindRightChannel
  8537.  move.l a2,a3
  8538.  bra.s gopastright
  8539. FOUNDRIGHT:
  8540.  move.w d5,d6
  8541. gopastright:
  8542.  tst.l a3
  8543.  bne.s FOUNDARIGHT
  8544.  rts
  8545. FOUNDARIGHT:
  8546.  
  8547. ; d6 = channel number
  8548.  move.b d0,1(a3)
  8549.  move.w d3,2(a3)
  8550.  
  8551.  move.w Samplenum,d5
  8552.  move.l #SampleList,a3
  8553.  move.l (a3,d5.w*8),a1
  8554.  move.l 4(a3,d5.w*8),a2
  8555.  
  8556.  tst.b d6
  8557.  seq NoiseMade0RIGHT
  8558.  beq.s .chan0
  8559.  cmp.b #2,d6
  8560.  slt NoiseMade1RIGHT
  8561.  blt .chan1
  8562.  seq NoiseMade2RIGHT
  8563.  beq .chan2
  8564.  st NoiseMade3RIGHT
  8565.  
  8566.  move.b d5,RIGHTPLAYEDTAB+9
  8567.  move.b d3,RIGHTPLAYEDTAB+1+9
  8568.  move.b d4,RIGHTPLAYEDTAB+2+9
  8569.  move.b d4,vol3right
  8570.  move.l a1,pos3RIGHT
  8571.  move.l a2,Samp3endRIGHT
  8572.  rts
  8573.  
  8574. .chan0: 
  8575.  move.b d5,RIGHTPLAYEDTAB
  8576.  move.b d3,RIGHTPLAYEDTAB+1
  8577.  move.b d4,RIGHTPLAYEDTAB+2
  8578.  move.l a1,pos0RIGHT
  8579.  move.l a2,Samp0endRIGHT
  8580.  move.b d4,vol0right
  8581.  rts
  8582.  
  8583. .chan1:
  8584.  move.b d5,RIGHTPLAYEDTAB+3
  8585.  move.b d3,RIGHTPLAYEDTAB+1+3
  8586.  move.b d4,RIGHTPLAYEDTAB+2+3
  8587.  move.b d3,vol1right
  8588.  move.l a1,pos1RIGHT
  8589.  move.l a2,Samp1endRIGHT
  8590.  rts
  8591.  
  8592. .chan2: 
  8593.  move.b d5,RIGHTPLAYEDTAB+6
  8594.  move.b d3,RIGHTPLAYEDTAB+1+6
  8595.  move.b d4,RIGHTPLAYEDTAB+2+6
  8596.  move.l a1,pos2RIGHT
  8597.  move.l a2,Samp2endRIGHT
  8598.  move.b d3,vol2right
  8599.  rts
  8600.  
  8601. NOSTEREO:
  8602.  move.l #0,a2
  8603.  move.l #-1,d5
  8604.  move.w #32767,d2
  8605.  move.b IDNUM,d0
  8606.  lea CHANNELDATA,a3
  8607.  move.w #7,d1
  8608. FindChannel
  8609.  tst.b (a3)
  8610.  bne.s .notactive
  8611.  cmp.b 1(a3),d0
  8612.  beq.s FOUNDCHAN
  8613.  cmp.w 2(a3),d2
  8614.  blt.s .notactive
  8615.  move.w 2(a3),d2
  8616.  move.l a3,a2
  8617.  move.w d5,d6
  8618.  add.w #1,d6
  8619.  
  8620. .notactive:
  8621.  add.w #4,a3
  8622.  add.w #1,d5
  8623.  dbra d1,FindChannel
  8624.  
  8625.  move.l a2,a3
  8626.  bra.s gopastchan
  8627. FOUNDCHAN:
  8628.  move.w d5,d6
  8629.  add.w #1,d6
  8630. gopastchan:
  8631.  tst.w d6
  8632.  bge.s FOUNDACHAN
  8633. tooquiet:
  8634.  rts
  8635. FOUNDACHAN:
  8636.  
  8637. ; d6 = channel number
  8638.  
  8639.  cmp.w noiseloud,d2
  8640.  bgt.s tooquiet
  8641.  
  8642.  move.b d0,1(a3)
  8643.  move.w noiseloud,2(a3)
  8644.  
  8645.  move.w Samplenum,d5
  8646.  move.l #SampleList,a3
  8647.  move.l (a3,d5.w*8),a1
  8648.  move.l 4(a3,d5.w*8),a2
  8649.  
  8650.  tst.b d6
  8651.  beq .chan0
  8652.  cmp.b #2,d6
  8653.  blt .chan1
  8654.  beq .chan2
  8655.  cmp.b #4,d6
  8656.  blt .chan3
  8657.  beq .chan4
  8658.  cmp.b #6,d6
  8659.  blt .chan5
  8660.  beq .chan6
  8661.  st NoiseMade3RIGHT
  8662.  
  8663.  move.b d5,RIGHTPLAYEDTAB+9
  8664.  move.b d3,RIGHTPLAYEDTAB+1+9
  8665.  move.b d4,RIGHTPLAYEDTAB+2+9
  8666.  move.b d4,vol3right
  8667.  move.l a1,pos3RIGHT
  8668.  move.l a2,Samp3endRIGHT
  8669.  rts
  8670.  
  8671. .chan3:
  8672.  st NoiseMade3LEFT
  8673.  move.b d5,LEFTPLAYEDTAB+9
  8674.  move.b d3,LEFTPLAYEDTAB+1+9
  8675.  move.b d4,LEFTPLAYEDTAB+2+9
  8676.  move.b d3,vol3left
  8677.  move.l a1,pos3LEFT
  8678.  move.l a2,Samp3endLEFT
  8679.  bra dorightchan
  8680.  
  8681. .chan0: 
  8682.  st NoiseMade0LEFT
  8683.  move.b d5,LEFTPLAYEDTAB
  8684.  move.b d3,LEFTPLAYEDTAB+1
  8685.  move.b d4,LEFTPLAYEDTAB+2
  8686.  move.l a1,pos0LEFT
  8687.  move.l a2,Samp0endLEFT
  8688.  move.b d3,vol0left
  8689.  rts
  8690.  
  8691. .chan1:
  8692.  st NoiseMade1LEFT
  8693.  move.b d5,LEFTPLAYEDTAB+3
  8694.  move.b d3,LEFTPLAYEDTAB+1+3
  8695.  move.b d4,LEFTPLAYEDTAB+2+3
  8696.  move.b d3,vol1left
  8697.  move.l a1,pos1LEFT
  8698.  move.l a2,Samp1endLEFT
  8699.  rts
  8700.  
  8701. .chan2: 
  8702.  st NoiseMade2LEFT
  8703.  move.b d5,LEFTPLAYEDTAB+6
  8704.  move.b d3,LEFTPLAYEDTAB+1+6
  8705.  move.b d4,LEFTPLAYEDTAB+2+6
  8706.  move.l a1,pos2LEFT
  8707.  move.l a2,Samp2endLEFT
  8708.  move.b d3,vol2left
  8709.  rts
  8710.  
  8711. .chan4: 
  8712.  st NoiseMade0RIGHT
  8713.  move.b d5,RIGHTPLAYEDTAB
  8714.  move.b d3,RIGHTPLAYEDTAB+1
  8715.  move.b d4,RIGHTPLAYEDTAB+2
  8716.  move.l a1,pos0RIGHT
  8717.  move.l a2,Samp0endRIGHT
  8718.  move.b d4,vol0right
  8719.  rts
  8720.  
  8721. .chan5:
  8722.  st NoiseMade1RIGHT
  8723.  move.b d5,RIGHTPLAYEDTAB+3
  8724.  move.b d3,RIGHTPLAYEDTAB+1+3
  8725.  move.b d4,RIGHTPLAYEDTAB+2+3
  8726.  move.b d3,vol1right
  8727.  move.l a1,pos1RIGHT
  8728.  move.l a2,Samp1endRIGHT
  8729.  rts
  8730.  
  8731. .chan6: 
  8732.  st NoiseMade2RIGHT
  8733.  move.b d5,RIGHTPLAYEDTAB+6
  8734.  move.b d3,RIGHTPLAYEDTAB+1+6
  8735.  move.b d4,RIGHTPLAYEDTAB+2+6
  8736.  move.l a1,pos2RIGHT
  8737.  move.l a2,Samp2endRIGHT
  8738.  move.b d3,vol2right
  8739.  rts
  8740.  
  8741. SampleList:
  8742.  dc.l Scream,EndScream
  8743.  dc.l Shoot,EndShoot
  8744.  dc.l Munch,EndMunch
  8745.  dc.l PooGun,EndPooGun
  8746.  dc.l Collect,EndCollect
  8747. ;5
  8748.  dc.l DoorNoise,EndDoorNoise
  8749.  dc.l 0,0
  8750.  dc.l Stomp,EndStomp
  8751.  dc.l LowScream,EndLowScream
  8752.  dc.l BaddieGun,EndBaddieGun
  8753. ;10
  8754.  dc.l SwitchNoise,EndSwitch
  8755.  dc.l Reload,EndReload
  8756.  dc.l NoAmmo,EndNoAmmo
  8757.  dc.l Splotch,EndSplotch
  8758.  dc.l SplatPop,EndSplatPop
  8759. ;15
  8760.  dc.l Boom,EndBoom
  8761.  dc.l Hiss,EndHiss
  8762.  dc.l Howl1,EndHowl1
  8763.  dc.l Howl2,EndHowl2
  8764.  dc.l Pant,EndPant
  8765. ;20
  8766.  dc.l Whoosh,EndWhoosh
  8767.  dc.l ROAR,EndROAR
  8768.  dc.l whoosh,Endwhoosh
  8769.  dc.l 0,0
  8770.  dc.l 0,0
  8771.  dc.l 0,0
  8772.  dc.l 0,0
  8773.  dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  8774.  dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  8775.  dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  8776.  dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  8777.  
  8778.  dc.l 0
  8779.  
  8780. storeval: dc.w 0
  8781.  
  8782.  include "ab3:source_4000/wallchunk.s"
  8783.  include "ab3:source_4000/loadfromdisk.s"
  8784.  include "ab3:source_4000/screensetup.s"
  8785.  include "ab3:source_4000/CONTROLLOOP.s"
  8786.  
  8787.  
  8788.  
  8789.  
  8790. saveinters:  
  8791.  dc.w 0
  8792.  
  8793. z: dc.w 10
  8794.  
  8795. notifplaying:
  8796.  dc.w 0
  8797.  
  8798. audpos1: dc.w 0
  8799. audpos1b: dc.w 0
  8800. audpos2: dc.w 0
  8801. audpos2b: dc.w 0
  8802. audpos3: dc.w 0
  8803. audpos3b: dc.w 0
  8804. audpos4: dc.w 0
  8805. audpos4b: dc.w 0
  8806.  
  8807. vol0left: dc.w 0
  8808. vol0right: dc.w 0
  8809. vol1left: dc.w 0
  8810. vol1right: dc.w 0
  8811. vol2left: dc.w 0
  8812. vol2right: dc.w 0
  8813. vol3left: dc.w 0
  8814. vol3right: dc.w 0
  8815.  
  8816. pos: dc.l 0
  8817.  
  8818. pos0LEFT: dc.l empty
  8819. pos1LEFT: dc.l empty
  8820. pos2LEFT: dc.l empty
  8821. pos3LEFT: dc.l empty
  8822. pos0RIGHT: dc.l empty
  8823. pos1RIGHT: dc.l empty
  8824. pos2RIGHT: dc.l empty
  8825. pos3RIGHT: dc.l empty
  8826.  
  8827. numtodo dc.w 0
  8828.  
  8829. npt: dc.w 0
  8830.  
  8831. pretab:
  8832. val SET 0
  8833.  REPT 128
  8834.  dc.b val
  8835. val SET val+1
  8836.  ENDR
  8837. val SET -128
  8838.  REPT 128
  8839.  dc.b val
  8840. val SET val+1
  8841.  ENDR 
  8842.  
  8843. tab:
  8844.  ds.b 256*65
  8845.  
  8846.  
  8847. test: dc.l 0
  8848.  ds.l 30
  8849.  
  8850.  even
  8851. ConstCols:
  8852. ; incbin "ConstCols"
  8853.  even
  8854. Smoothscalecols:
  8855. ; incbin "smoothbumppalscaled"
  8856.  even
  8857. SmoothTile:
  8858. ; incbin "smoothbumptile"
  8859.  even
  8860. Bumpscalecols:
  8861. ; incbin "Bumppalscaled"
  8862.  even
  8863. Bumptile:
  8864. ; incbin "bumptile"
  8865.  even
  8866. scalecols: ;incbin "bytepixpalscaled"
  8867.  even
  8868. floorscalecols:
  8869.  incbin "floorpalscaled"
  8870.  ds.w 256*4
  8871.  
  8872.  even
  8873. PaletteAddr: dc.l 0
  8874. ChunkAddr: dc.l 0
  8875. ;walltiles:
  8876. ; dc.l GreenMechanicWALL
  8877. ; dc.l BlueGreyMetalWALL
  8878. ; dc.l TechnoDetailWALL
  8879. ; dc.l BlueStoneWALL
  8880. ; dc.l RedAlertWALL
  8881. ; dc.l RockWALL
  8882. ;
  8883. ;GreenMechanicWALL: incbin "ab3:includes/walls/greenmechanic.wad"
  8884. ;BlueGreyMetalWALL: incbin "ab3:includes/walls/BlueGreyMetal.wad"
  8885. ;TechnoDetailWALL: incbin "ab3:includes/walls/TechnoDetail.wad"
  8886. ;BlueStoneWALL: incbin "ab3:includes/walls/bluestone.wad"
  8887. ;RedAlertWALL: incbin "ab3:includes/walls/redalert.wad"
  8888. ;RockWALL: incbin "ab3:includes/walls/rock.wad"
  8889.  
  8890. floortile:
  8891.  dc.l 0
  8892. ; incbin "floortile" 
  8893.  even
  8894. wallrouts:
  8895. ; incbin "2x2WallDraw" 
  8896.  CNOP 0,64
  8897. BackPicture:
  8898.  incbin "backfile"
  8899. EndBackPicture:
  8900.  
  8901. drawpt: dc.l 0
  8902. olddrawpt: dc.l 0
  8903. frompt: dc.l 0 
  8904.  
  8905. SineTable:
  8906.  incbin "bigsine"
  8907.  
  8908. angspd: dc.w 0
  8909. flooryoff: dc.w 0
  8910. xoff: dc.l 0
  8911. yoff: dc.l 0
  8912. yvel: dc.l 0
  8913. zoff: dc.l 0
  8914. tyoff: dc.l 0
  8915. xspdval: dc.l 0
  8916. zspdval: dc.l 0
  8917. Zone: dc.w 0
  8918.  
  8919. PLR1: dc.b $ff
  8920.  even
  8921. PLR1_energy: dc.w 191
  8922. PLR1_GunSelected: dc.w 0
  8923. PLR1_cosval: dc.w 0
  8924. PLR1_sinval: dc.w 0
  8925. PLR1_angpos: dc.w 0
  8926. PLR1_angspd: dc.w 0
  8927. PLR1_xoff: dc.l 0
  8928. PLR1_yoff: dc.l 0
  8929. PLR1_yvel: dc.l 0
  8930. PLR1_zoff: dc.l 0
  8931. PLR1_tyoff: dc.l 0
  8932. PLR1_xspdval: dc.l 0
  8933. PLR1_zspdval: dc.l 0
  8934. PLR1_Zone: dc.w 0
  8935. PLR1_Roompt: dc.l 0
  8936. PLR1_OldRoompt: dc.l 0
  8937. PLR1_PointsToRotatePtr: dc.l 0
  8938. PLR1_ListOfGraphRooms: dc.l 0
  8939. PLR1_oldxoff: dc.l 0
  8940. PLR1_oldzoff: dc.l 0
  8941. PLR1_StoodInTop: dc.b 0
  8942.  even
  8943. PLR1_height: dc.l 0
  8944.  
  8945.  ds.w 4
  8946.  
  8947. OLDX1: dc.l 0
  8948. OLDX2: dc.l 0
  8949. OLDZ1: dc.l 0
  8950. OLDZ2: dc.l 0
  8951.  
  8952. XDIFF1: dc.l 0
  8953. ZDIFF1: dc.l 0
  8954. XDIFF2: dc.l 0
  8955. ZDIFF2: dc.l 0
  8956.  
  8957. PLR1s_cosval: dc.w 0
  8958. PLR1s_sinval: dc.w 0
  8959. PLR1s_angpos: dc.w 0
  8960. PLR1s_angspd: dc.w 0
  8961. PLR1s_xoff: dc.l 0
  8962. PLR1s_yoff: dc.l 0
  8963. PLR1s_yvel: dc.l 0
  8964. PLR1s_zoff: dc.l 0
  8965. PLR1s_tyoff: dc.l 0
  8966. PLR1s_xspdval: dc.l 0
  8967. PLR1s_zspdval: dc.l 0
  8968. PLR1s_Zone: dc.w 0
  8969. PLR1s_Roompt: dc.l 0
  8970. PLR1s_OldRoompt: dc.l 0
  8971. PLR1s_PointsToRotatePtr: dc.l 0
  8972. PLR1s_ListOfGraphRooms: dc.l 0
  8973. PLR1s_oldxoff: dc.l 0
  8974. PLR1s_oldzoff: dc.l 0
  8975. PLR1s_height: dc.l 0
  8976. PLR1s_targheight: dc.l 0
  8977.  
  8978. p1_xoff: dc.l 0
  8979. p1_zoff: dc.l 0
  8980. p1_yoff: dc.l 0
  8981. p1_height: dc.l 0
  8982. p1_angpos: dc.w 0
  8983. p1_bobble: dc.w 0
  8984. p1_clicked: dc.b 0
  8985. p1_spctap: dc.b 0
  8986. p1_ducked: dc.b 0
  8987. p1_gunselected: dc.b 0
  8988. p1_fire: dc.b 0
  8989.  even
  8990. p1_holddown: dc.w 0
  8991.  
  8992.  ds.w 4
  8993.  
  8994. PLR2: dc.b $ff
  8995.  even
  8996. PLR2_GunSelected: dc.w 0
  8997. PLR2_energy: dc.w 191
  8998. PLR2_cosval: dc.w 0
  8999. PLR2_sinval: dc.w 0
  9000. PLR2_angpos: dc.w 0
  9001. PLR2_angspd: dc.w 0
  9002. PLR2_xoff: dc.l 0
  9003. PLR2_yoff: dc.l 0
  9004. PLR2_yvel: dc.l 0
  9005. PLR2_zoff: dc.l 0
  9006. PLR2_tyoff: dc.l 0
  9007. PLR2_xspdval: dc.l 0
  9008. PLR2_zspdval: dc.l 0
  9009. PLR2_Zone: dc.w 0
  9010. PLR2_Roompt: dc.l 0
  9011. PLR2_OldRoompt: dc.l 0
  9012. PLR2_PointsToRotatePtr: dc.l 0
  9013. PLR2_ListOfGraphRooms: dc.l 0
  9014. PLR2_oldxoff: dc.l 0
  9015. PLR2_oldzoff: dc.l 0
  9016. PLR2_StoodInTop: dc.b 0
  9017.  even
  9018. PLR2_height: dc.l 0
  9019.  
  9020.  ds.w 4
  9021.  
  9022. PLR2s_cosval: dc.w 0
  9023. PLR2s_sinval: dc.w 0
  9024. PLR2s_angpos: dc.w 0
  9025. PLR2s_angspd: dc.w 0
  9026. PLR2s_xoff: dc.l 0
  9027. PLR2s_yoff: dc.l 0
  9028. PLR2s_yvel: dc.l 0
  9029. PLR2s_zoff: dc.l 0
  9030. PLR2s_tyoff: dc.l 0
  9031. PLR2s_xspdval: dc.l 0
  9032. PLR2s_zspdval: dc.l 0
  9033. PLR2s_Zone: dc.w 0
  9034. PLR2s_Roompt: dc.l 0
  9035. PLR2s_OldRoompt: dc.l 0
  9036. PLR2s_PointsToRotatePtr: dc.l 0
  9037. PLR2s_ListOfGraphRooms: dc.l 0
  9038. PLR2s_oldxoff: dc.l 0
  9039. PLR2s_oldzoff: dc.l 0
  9040. PLR2s_height: dc.l 0
  9041. PLR2s_targheight: dc.l 0
  9042.  
  9043.  ds.w 4
  9044.  
  9045. p2_xoff: dc.l 0
  9046. p2_zoff: dc.l 0
  9047. p2_yoff: dc.l 0
  9048. p2_height: dc.l 0
  9049. p2_angpos: dc.w 0
  9050. p2_bobble: dc.w 0
  9051. p2_clicked: dc.b 0
  9052. p2_spctap: dc.b 0
  9053. p2_ducked: dc.b 0
  9054. p2_gunselected: dc.b 0
  9055. p2_fire: dc.b 0
  9056.  even
  9057. p2_holddown: dc.w 0
  9058.  
  9059.  
  9060. liftanimtab:
  9061.  
  9062.  
  9063. endliftanimtab:
  9064.  
  9065. glassball:
  9066. ; incbin "glassball.inc"
  9067. endglass
  9068. glassballpt: dc.l glassball
  9069.  
  9070. rndtab: ; incbin "randfile"
  9071. endrnd: 
  9072.  
  9073. brightanimtab:
  9074.  dcb.w 200,20
  9075.  dc.w 5
  9076.  dc.w 10,20
  9077.  dc.w 5
  9078.  dcb.w 30,20
  9079.  dc.w 7,10,10,5,10,0,5,6,5,6,5,6,5,6,0
  9080.  dcb.w 40,0
  9081.  dc.w 1,2,3,2,3,2,3,2,3,2,3,2,3,0
  9082.  dcb.w 300,0
  9083.  dc.w 1,0,1,0,2,2,2,5,5,5,5,5,5,5,5,5,6,10
  9084.  dc.w -1
  9085.  
  9086. Roompt: dc.l 0
  9087. OldRoompt: dc.l 0
  9088.  
  9089. *****************************************************************
  9090.  *
  9091.  include "AB3:source_4000/LevelData2"
  9092.  *
  9093. *****************************************************************
  9094.  
  9095.  
  9096. wallpt: dc.l 0
  9097. floorpt: dc.l 0
  9098.  
  9099. Rotated:
  9100.  ds.l 2*800 
  9101. ObjRotated:
  9102.  ds.l 2*500
  9103.  
  9104. OnScreen:
  9105.  ds.l 2*800 
  9106.  
  9107. startwait: dc.w 0
  9108. endwait: dc.w 0
  9109.  
  9110. Faces:; incbin "faces2raw"
  9111.  
  9112. *******************************************************************
  9113.  
  9114. consttab:
  9115.  incbin "constantfile"
  9116.  
  9117. *******************************************************************
  9118.  
  9119.  
  9120.  
  9121. *********************************
  9122.  
  9123. ; include "ab3:source_4000/loadmod.a"
  9124. ; include "ab3:source_4000/proplayer.a"
  9125.  
  9126.  
  9127. darkentab: incbin "darkenedcols"
  9128. brightentab: incbin "brightenfile"
  9129. WorkSpace:
  9130.  ds.l 8192 
  9131. waterfile: incbin "waterfile"
  9132.  
  9133.  SECTION ffff,CODE_C
  9134.  
  9135. nullspr: dc.l 0
  9136.  
  9137.  cnop 0,8
  9138. borders:
  9139.  incbin "newleftbord"
  9140.  incbin "newrightbord"
  9141.  
  9142. health: incbin "healthstrip"
  9143. Ammunition: incbin "ammostrip"
  9144. healthpal: incbin "healthpal"
  9145. PanelKeys: incbin "greenkey"
  9146.  incbin "redkey"
  9147.  incbin "yellowkey"
  9148.  incbin "bluekey"
  9149.  
  9150. null: ds.w 500
  9151. null2: ds.w 500
  9152. null3: ds.w 500
  9153. null4: ds.w 500
  9154.  
  9155.  
  9156. Blurbfield:
  9157.  
  9158.  dc.w bpl1ptl
  9159. bl1l: dc.w 0
  9160.  dc.w bpl1pth
  9161. bl1h: dc.w 0
  9162.  
  9163.  dc.w diwstart,$2c81
  9164.  dc.w diwstop,$1cc1
  9165.  dc.w ddfstart,$38
  9166.  dc.w ddfstop,$b8
  9167.  dc.w bplcon0,$9201
  9168.  dc.w bplcon1,0
  9169.  dc.w $106,$c40
  9170. blcols:
  9171.  dc.w col0,0
  9172.  dc.w col1,$fff
  9173.  
  9174.  dc.w $108,0
  9175.  dc.w $10a,0
  9176.  
  9177.  dc.w $ffff,$fffe
  9178.  dc.w $ffff,$fffe
  9179.  
  9180. nullline:
  9181.  ds.b 80    
  9182.  
  9183.  include "ab3:source_4000/titlecop.s"
  9184.  
  9185. bigfield:    
  9186.                 ; Start of our copper list.
  9187.  
  9188.  dc.w dmacon,$8020
  9189.  dc.w intreq,$8011
  9190.  dc.w $1fc,$f
  9191.  dc.w diwstart
  9192. winstart: dc.w $2cb1
  9193.  dc.w diwstop
  9194. winstop: dc.w $2c91
  9195.  dc.w ddfstart
  9196. fetchstart: dc.w $48
  9197.  dc.w ddfstop
  9198. fetchstop: dc.w $88
  9199.  
  9200. bordercols:
  9201.  incbin "borderpal"
  9202.  
  9203.  dc.w spr0ptl
  9204. s0l:
  9205.  dc.w 0
  9206.  dc.w spr0pth
  9207. s0h:
  9208.  dc.w 0
  9209.  dc.w spr1ptl
  9210. s1l:
  9211.  dc.w 0
  9212.  dc.w spr1pth
  9213. s1h:
  9214.  dc.w 0
  9215.  dc.w spr2ptl
  9216. s2l:
  9217.  dc.w 0
  9218.  dc.w spr2pth
  9219. s2h:
  9220.  dc.w 0
  9221.  dc.w spr3ptl
  9222. s3l:
  9223.  dc.w 0
  9224.  dc.w spr3pth
  9225. s3h:
  9226.  dc.w 0
  9227.  dc.w spr4ptl
  9228. s4l:
  9229.  dc.w 0
  9230.  dc.w spr4pth
  9231. s4h:
  9232.  dc.w 0
  9233.  dc.w spr5ptl
  9234. s5l:
  9235.  dc.w 0
  9236.  dc.w spr5pth
  9237. s5h:
  9238.  dc.w 0
  9239.  dc.w spr6ptl
  9240. s6l:
  9241.  dc.w 0
  9242.  dc.w spr6pth
  9243. s6h:
  9244.  dc.w 0
  9245.  dc.w spr7ptl
  9246. s7l:
  9247.  dc.w 0
  9248.  dc.w spr7pth
  9249. s7h:
  9250.  dc.w 0
  9251.  
  9252.  dc.w $106,$c42
  9253.  incbin "borderpal"
  9254.  
  9255.  dc.w $106,$8c42
  9256.  dc.w col0
  9257. hitcol: dc.w $0
  9258.  dc.w $106,$c42
  9259.  dc.w col0
  9260. hitcol2: dc.w 0
  9261.  
  9262.  dc.w bplcon0,$7201
  9263.  dc.w bplcon1
  9264. smoff:
  9265.  dc.w $0
  9266.  
  9267.  dc.w $108
  9268. modulo: dc.w -24
  9269.  dc.w $10a,-24
  9270.  
  9271.  dc.w bpl1pth
  9272. pl1h
  9273.  dc.w 0
  9274.  
  9275.  dc.w bpl1ptl
  9276. pl1l
  9277.  dc.w 0
  9278.  
  9279.  dc.w bpl2pth
  9280. pl2h
  9281.  dc.w 0
  9282.  
  9283.  dc.w bpl2ptl
  9284. pl2l
  9285.  dc.w 0
  9286.  
  9287.  dc.w bpl3pth
  9288. pl3h
  9289.  dc.w 0
  9290.  
  9291.  dc.w bpl3ptl
  9292. pl3l
  9293.  dc.w 0
  9294.  
  9295.  dc.w bpl4pth
  9296. pl4h
  9297.  dc.w 0
  9298.  
  9299.  dc.w bpl4ptl
  9300. pl4l
  9301.  dc.w 0
  9302.  
  9303.  dc.w bpl5pth
  9304. pl5h
  9305.  dc.w 0
  9306.  
  9307.  dc.w bpl5ptl
  9308. pl5l
  9309.  dc.w 0
  9310.  
  9311.  dc.w bpl6pth
  9312. pl6h
  9313.  dc.w 0
  9314.  
  9315.  dc.w bpl6ptl
  9316. pl6l
  9317.  dc.w 0
  9318.  
  9319.  dc.w bpl7pth
  9320. pl7h
  9321.  dc.w 0
  9322.  
  9323.  dc.w bpl7ptl
  9324. pl7l
  9325.  dc.w 0
  9326.  
  9327.  
  9328.  dc.w $1001,$ff00
  9329.  dc.w intreq,$11
  9330. yposcop:
  9331.  dc.w $2a11,$fffe
  9332.  dc.w $8a,0
  9333.  
  9334. ; ds.l 104*12
  9335.  
  9336. ;colbars:
  9337. ;val SET $2a
  9338. ; dcb.l 104*80,$1fe0000
  9339. ; dc.w $106,$c42
  9340. ; dc.w $80
  9341. ;pch1:
  9342. ; dc.w 0
  9343. ; dc.w $82
  9344. ;pcl1:
  9345. ; dc.w 0 
  9346. ; dc.w $88,0
  9347. ; dc.w $ffff,$fffe       ; End copper list.
  9348.  
  9349. ; ds.l 104*12
  9350.  
  9351. ;colbars2:
  9352. ;val SET $2a
  9353. ; dcb.l 104*80,$1fe0000
  9354. ; dc.w $106,$c42
  9355. ; dc.w $80
  9356. ;pch2:
  9357. ; dc.w 0
  9358. ; dc.w $82
  9359. ;pcl2:
  9360. ; dc.w 0
  9361. ; dc.w $88,0
  9362. ; dc.w $ffff,$fffe       ; End copper list.
  9363.  
  9364. ; ds.l 104*10
  9365.  
  9366. NullCopper:
  9367.  dc.w $ffff,$fffe
  9368.  
  9369. old: dc.l 0
  9370.  
  9371. prot5: dc.w 0
  9372. PanelCop:
  9373.  
  9374.  dc.w $80
  9375. och:
  9376.  dc.w 0
  9377.  dc.w $82
  9378. ocl:
  9379.  dc.w 0
  9380.  
  9381. statskip:
  9382.  dc.w $1fe,0
  9383.  dc.w $1fe,0
  9384.  
  9385.  dc.w $10c,0
  9386.  dc.w bplcon0,$1201
  9387.  dc.w bpl1ptl
  9388. n1l:
  9389.  dc.w 0
  9390.  dc.w bpl1pth
  9391. n1h:
  9392.  dc.w 0
  9393.  dc.w $108,-24
  9394.  incbin "Panelpal"
  9395.  
  9396.  dc.w bpl2pth
  9397. p2h
  9398.  dc.w 0
  9399.  
  9400.  dc.w bpl2ptl
  9401. p2l
  9402.  dc.w 0
  9403.  
  9404.  dc.w bpl3pth
  9405. p3h
  9406.  dc.w 0
  9407.  
  9408.  dc.w bpl3ptl
  9409. p3l
  9410.  dc.w 0
  9411.  
  9412.  dc.w bpl4pth
  9413. p4h
  9414.  dc.w 0
  9415.  dc.w bpl4ptl
  9416. p4l
  9417.  dc.w 0
  9418.  dc.w bpl5pth
  9419. p5h
  9420.  dc.w 0
  9421.  dc.w bpl5ptl
  9422. p5l
  9423.  dc.w 0
  9424.  dc.w bpl6pth
  9425. p6h
  9426.  dc.w 0
  9427.  dc.w bpl6ptl
  9428. p6l
  9429.  dc.w 0
  9430.  dc.w bpl7pth
  9431. p7h
  9432.  dc.w 0
  9433.  dc.w bpl7ptl
  9434. p7l
  9435.  dc.w 0
  9436.  dc.w bpl8pth
  9437. p8h
  9438.  dc.w 0
  9439.  dc.w bpl8ptl
  9440. p8l
  9441.  dc.w 0
  9442.  
  9443.  
  9444.  dc.w ddfstart,$38
  9445.  dc.w ddfstop,$b8
  9446.  dc.w diwstart,$2c81
  9447.  dc.w diwstop,$2cc1
  9448.  
  9449.  dc.w bplcon0
  9450. Panelcon: dc.w $0211
  9451.  dc.w bpl1pth
  9452. p1h
  9453.  dc.w 0
  9454.  
  9455.  dc.w bpl1ptl
  9456. p1l
  9457.  dc.w 0
  9458.  
  9459.  
  9460.  dc.w $108,40*7
  9461.  dc.w $10a,40*7
  9462.  
  9463.  dc.w $ffff,$fffe
  9464.  
  9465.  dc.w $180,$fff
  9466.  
  9467.  
  9468.  dc.w $f801,$ff00
  9469.  dc.w col1,$50
  9470.  dc.w $f901,$ff00
  9471.  dc.w col1,$90
  9472.  dc.w $fa01,$ff00
  9473.  dc.w col1,$f0
  9474.  dc.w $fb01,$ff00
  9475.  dc.w col1,$f0
  9476.  dc.w $fc01,$ff00
  9477.  dc.w col1,$90
  9478.  dc.w $fd01,$ff00
  9479.  dc.w col1,$50
  9480.  
  9481.  dc.w $fe01,$ff00
  9482.  dc.w col1,$fff
  9483.  
  9484.  dc.w $ffdf,$fffe
  9485.  dc.w $a01,$ff00
  9486.  dc.w bplcon0,$201
  9487.  
  9488.  incbin "faces2cols"
  9489.  dc.w bpl1pth
  9490. f1h
  9491.  dc.w 0
  9492.  
  9493.  dc.w bpl1ptl
  9494. f1l
  9495.  dc.w 0
  9496.  
  9497.  dc.w bpl2pth
  9498. f2h
  9499.  dc.w 0
  9500.  
  9501.  dc.w bpl2ptl
  9502. f2l
  9503.  dc.w 0
  9504.  
  9505.  dc.w bpl3pth
  9506. f3h
  9507.  dc.w 0
  9508.  
  9509.  dc.w bpl3ptl
  9510. f3l
  9511.  dc.w 0
  9512.  
  9513.  dc.w bpl4pth
  9514. f4h
  9515.  dc.w 0
  9516.  dc.w bpl4ptl
  9517. f4l
  9518.  dc.w 0
  9519.  
  9520.  dc.w bpl5pth
  9521. f5h
  9522.  dc.w 0
  9523.  dc.w bpl5ptl
  9524. f5l
  9525.  dc.w 0
  9526.  
  9527.  dc.w $0c01,$ff00
  9528.  dc.w bplcon0,$5201
  9529.   
  9530.  dc.w $ffff,$fffe
  9531.  
  9532.  cnop 0,64
  9533. FacePlace:
  9534. ; ds.l 6*32*5
  9535.  
  9536. TEXTSCRN: dc.l 0
  9537.  
  9538. TEXTCOP:
  9539.  dc.w intreq,$8030
  9540.  
  9541.  dc.w spr0ptl
  9542. txs0l:
  9543.  dc.w 0
  9544.  dc.w spr0pth
  9545. txs0h:
  9546.  dc.w 0
  9547.  dc.w spr1ptl
  9548. txs1l:
  9549.  dc.w 0
  9550.  dc.w spr1pth
  9551. txs1h:
  9552.  dc.w 0
  9553.  dc.w spr2ptl
  9554. txs2l:
  9555.  dc.w 0
  9556.  dc.w spr2pth
  9557. txs2h:
  9558.  dc.w 0
  9559.  dc.w spr3ptl
  9560. txs3l:
  9561.  dc.w 0
  9562.  dc.w spr3pth
  9563. txs3h:
  9564.  dc.w 0
  9565.  dc.w spr4ptl
  9566. txs4l:
  9567.  dc.w 0
  9568.  dc.w spr4pth
  9569. txs4h:
  9570.  dc.w 0
  9571.  dc.w spr5ptl
  9572. txs5l:
  9573.  dc.w 0
  9574.  dc.w spr5pth
  9575. txs5h:
  9576.  dc.w 0
  9577.  dc.w spr6ptl
  9578. txs6l:
  9579.  dc.w 0
  9580.  dc.w spr6pth
  9581. txs6h:
  9582.  dc.w 0
  9583.  dc.w spr7ptl
  9584. txs7l:
  9585.  dc.w 0
  9586.  dc.w spr7pth
  9587. txs7h:
  9588.  dc.w 0
  9589.  
  9590.  
  9591.  dc.w $10c,$0088
  9592.  
  9593.  dc.w $1fc,$f
  9594.  dc.w diwstart,$2c81    ; Top left corner of screen.
  9595.  dc.w diwstop,$2cc1     ; Bottom right corner of screen.
  9596.  dc.w ddfstart,$38      ; Data fetch start.
  9597.  dc.w ddfstop,$c8       ; Data fetch stop.
  9598.  
  9599.  dc.w bplcon0
  9600. TSCP:
  9601.  dc.w $9201
  9602.  
  9603.  dc.w $106,$c40
  9604.  
  9605.  dc.w $2a01,$ff00
  9606.  
  9607.  dc.w col0,0
  9608.  dc.w col1
  9609. TOPLET:
  9610. TXTCOLL:
  9611.  dc.w 0
  9612.   dc.w col2
  9613. BOTLET:
  9614.  dc.w 0
  9615.  dc.w col3
  9616. ALLTEXT:
  9617.  dc.w $fff
  9618.  dc.w $106,$e40
  9619.  dc.w col3
  9620. ALLTEXTLOW:
  9621.  dc.w $0
  9622.  
  9623.  
  9624.  dc.w bpl1pth
  9625. TSPTh:
  9626.  dc.w 0
  9627.  dc.w bpl1ptl
  9628. TSPTl:
  9629.  dc.w 0
  9630.  
  9631.  dc.w bpl2pth
  9632. TSPTh2:
  9633.  dc.w 0
  9634.  dc.w bpl2ptl
  9635. TSPTl2:
  9636.  dc.w 0
  9637.  
  9638.  
  9639.  dc.w $108,0
  9640.  dc.w $10a,0
  9641.  
  9642.  dc.w $ffff,$fffe
  9643.  
  9644. ********************************************
  9645. * Stuff you don't have to worry about yet. *
  9646. ********************************************
  9647.  
  9648. closeeverything:
  9649.  
  9650.  jsr mt_end
  9651.  
  9652.  move.l #nullcop,d0
  9653. ; move.l old,d0
  9654.  
  9655.  
  9656. ;charlie  
  9657.  move.l d0,$dff080     ; Restore old copper list.
  9658.  move.w d0,ocl
  9659.  swap d0
  9660.  move.w d0,och
  9661.  
  9662. ; move.l doslib,a6
  9663. ; move.l #4,d1
  9664. ; jsr -198(a6)
  9665.  
  9666. ; move.l doslib,d0
  9667. ; move.l d0,a1
  9668. ; move.l 4.w,a6
  9669. ; jsr CloseLib(a6)
  9670.  
  9671.  move.l #$dff000,a6
  9672.  move.w #$8020,dmacon(a6)
  9673.  move.w #$f,dmacon(a6)
  9674.  
  9675. ; move.l 4.w,a6
  9676. ; lea VBLANKInt,a1
  9677. ; moveq #INTB_COPER,d0
  9678. ; jsr _LVORemIntServer(a6)
  9679.  
  9680. ; IFEQ CD32VER
  9681. ; move.l OLDKINT,$68.w
  9682. ; ENDC
  9683. ; move.w saveinters,d0
  9684. ; or.w #$c000,d0
  9685. ; move.w d0,intena(a6)
  9686.  clr.w $dff0a8
  9687.  clr.w $dff0b8
  9688.  clr.w $dff0c8
  9689.  clr.w $dff0d8
  9690.  
  9691.  
  9692. ; move.l oldview,a1
  9693. ; move.l a1,d0
  9694. ; move.l gfxbase,a6
  9695. ; jsr -$de(a6)
  9696.  
  9697. ; cmp.b #'s',mors
  9698. ; beq.s leaveold
  9699. ; move.w #$f8e,$dff1dc
  9700. ;leaveold:
  9701.  
  9702.  jsr RELEASELEVELMEM
  9703.  jsr RELEASESCRNMEM
  9704.  
  9705.  move.l #0,d0
  9706.  
  9707.  rts
  9708.  
  9709.  
  9710.  
  9711. intbase: dc.l 0
  9712. gfxbase: dc.l 0
  9713. oldview: dc.l 0
  9714.  
  9715. stuff:
  9716.  
  9717.     PRSDL
  9718.     Lea    gfxname(pc),a1    
  9719.     Moveq.l    #0,d0
  9720.     Move.l    $4.w,a6    
  9721.     Jsr    -$228(a6)
  9722.     add.w d1,RVAL1
  9723.     Move.l     d0,gfxbase
  9724.     Move.l    d0,a6                Use As Base Reg
  9725.     Move.l    34(a6),oldview
  9726.     move.l 38(a6),old
  9727.     rts
  9728.  
  9729. gfxname dc.b "graphics.library",0
  9730.  even
  9731. INTUNAME    dc.b    "intuition.library",0
  9732.  
  9733.  even
  9734.  
  9735.  
  9736.  cnop 0,64
  9737.  
  9738. Panel:
  9739.  dc.l 0
  9740.  
  9741. TimerScr: 
  9742. ;ds.b 40*64
  9743.  
  9744. scrntab:
  9745.  ds.b 16
  9746. val SET 32
  9747.  REPT 96
  9748.  dc.b val,val,val
  9749. val SET val+1
  9750.  ENDR
  9751.  ds.b 16
  9752.  
  9753. smallscrntab:
  9754. val SET 32
  9755.  REPT 96
  9756.  dc.b val,val
  9757. val SET val+1
  9758.  ENDR
  9759.  
  9760.  cnop 0,64
  9761. scrn:
  9762.  
  9763.  dcb.l 8,$33333333
  9764.  dc.l 0
  9765.  dc.l 0
  9766.  
  9767.  dcb.l 8,$0f0f0f0f
  9768.  dc.l 0
  9769.  dc.l 0
  9770.  
  9771.  dcb.l 8,$00ff00ff
  9772.  dc.l 0
  9773.  dc.l 0
  9774.  
  9775.  dcb.l 8,$0000ffff
  9776.  dc.l 0
  9777.  dc.l 0
  9778.  
  9779.  dc.l 0,-1,0,-1,0,-1,0,-1
  9780.  dc.l 0
  9781.  dc.l 0
  9782.  
  9783.  dc.l -1,-1,0,0,-1,-1,0,0
  9784.  dc.l 0
  9785.  dc.l 0
  9786.  
  9787.  dc.l 0,0,-1,-1,-1,-1,-1,-1
  9788.  dc.l 0
  9789.  dc.l 0
  9790.  
  9791. NumTimes: dc.l 0
  9792. TimeCount: dc.l 0
  9793. oldtime: dc.l 0
  9794. counting: dc.b 0
  9795. oktodisplay: dc.b 0
  9796.  
  9797. INITTIMER:
  9798.  move.l #0,TimeCount
  9799.  move.l #0,NumTimes
  9800.  rts
  9801.  
  9802. STARTCOUNT:
  9803.  move.l d0,-(a7)
  9804.  move.l $dff004,d0
  9805.  and.l #$1ffff,d0
  9806.  move.l d0,oldtime
  9807.  st counting
  9808.  move.l (a7)+,d0
  9809.  rts
  9810.  
  9811. STOPCOUNT:
  9812.  move.l d0,-(a7)
  9813.  move.l $dff004,d0
  9814.  and.l #$1ffff,d0
  9815.  
  9816.  sub.l oldtime,d0
  9817.  cmp.l #-256,d0
  9818.  bge.s okcount
  9819.  add.l #313*256,d0
  9820. okcount:
  9821.  add.l d0,TimeCount
  9822.  addq.l #1,NumTimes
  9823.  clr.b counting
  9824.  move.l (a7)+,d0
  9825.  rts
  9826.  
  9827. STOPCOUNTNOADD:
  9828.  move.l d0,-(a7)
  9829.  move.l $dff004,d0
  9830.  and.l #$1ffff,d0
  9831.  
  9832.  sub.l oldtime,d0
  9833.  cmp.l #-256,d0
  9834.  bge.s okcount2
  9835.  add.l #313*256,d0
  9836. okcount2:
  9837.  add.l d0,TimeCount
  9838.  clr.b counting
  9839.  move.l (a7)+,d0
  9840.  rts
  9841.  
  9842. maxbot: dc.w 0
  9843. tstneg: dc.l 0
  9844.  
  9845. STOPTIMER:
  9846.  st oktodisplay
  9847.  rts
  9848.  
  9849. digits: incbin "numbers.inc"
  9850.  
  9851.  
  9852.  Section Sounds,CODE_C
  9853.  
  9854. nullcop:
  9855.  dc.w $106,$c40
  9856.  dc.w $180,0 
  9857.  dc.w $100,$0
  9858.  dc.w $ffff,$fffe
  9859.  
  9860. Scream:
  9861. ; incbin "ab3:sounds/Scream"
  9862. ; ds.w 100
  9863. EndScream:
  9864. LowScream:
  9865. ; incbin "ab3:sounds/LowScream"
  9866. ; ds.w 100
  9867. EndLowScream:
  9868. BaddieGun:
  9869. ; incbin "ab3:sounds/BaddieGun"
  9870. EndBaddieGun:
  9871. bass:
  9872. ; incbin "ab3:sounds/backbass+drum"
  9873. bassend:
  9874. Shoot:
  9875. ; incbin "ab3:sounds/fire!"
  9876. EndShoot:
  9877. Munch:
  9878. ; incbin "ab3:sounds/munch"
  9879. EndMunch:
  9880. PooGun:
  9881. ; incbin "ab3:sounds/shoot.dm"
  9882. EndPooGun:
  9883. Collect:
  9884. ; incbin "ab3:sounds/collect"
  9885. EndCollect:
  9886. DoorNoise:
  9887. ; incbin "ab3:sounds/newdoor"
  9888. EndDoorNoise:
  9889. Stomp:
  9890. ; incbin "ab3:sounds/footstep3"
  9891. EndStomp:
  9892. SwitchNoise:
  9893. ; incbin "ab3:sounds/switch"
  9894. EndSwitch:
  9895. Reload:
  9896. ; incbin "ab3:sounds/switch1.SFX"
  9897. EndReload:
  9898.  
  9899. CHEATFRAME:
  9900.  dc.b 26,20,33,27,17,12
  9901. ENDCHEAT:
  9902.  
  9903. NoAmmo:
  9904. ; incbin "ab3:sounds/noammo"
  9905. EndNoAmmo:
  9906. Splotch:
  9907. ; incbin "ab3:sounds/splotch"
  9908. EndSplotch:
  9909. SplatPop:
  9910. ; incbin "ab3:sounds/splatpop"
  9911. EndSplatPop:
  9912. Boom:
  9913. ; incbin "ab3:sounds/boom"
  9914. EndBoom:
  9915. Hiss:
  9916. ; incbin "ab3:sounds/newhiss"
  9917. EndHiss:
  9918. Howl1:
  9919. ; incbin "ab3:sounds/howl1"
  9920. EndHowl1:
  9921. Howl2:
  9922. ; incbin "ab3:sounds/howl2"
  9923. EndHowl2:
  9924. Pant:
  9925. ; incbin "ab3:sounds/pant"
  9926. EndPant:
  9927. Whoosh:
  9928. ; incbin "ab3:sounds/whoosh"
  9929. EndWhoosh:
  9930. ROAR:
  9931. ; incbin "ab3:sounds/bigscream"
  9932. EndROAR
  9933. whoosh:
  9934. ; incbin "ab3:sounds/flame"
  9935. Endwhoosh:
  9936.  SECTION music,code_c
  9937.  
  9938. UseAllChannels: dc.w 0
  9939.  
  9940. mt_init:move.l    mt_data,a0
  9941.     move.l    a0,a1
  9942.     add.l    #$3b8,a1
  9943.     moveq    #$7f,d0
  9944.     moveq    #0,d1
  9945. mt_loop:move.l    d1,d2
  9946.     subq.w    #1,d0
  9947. mt_lop2:move.b    (a1)+,d1
  9948.     cmp.b    d2,d1
  9949.     bgt.s    mt_loop
  9950.     dbf    d0,mt_lop2
  9951.     addq.b    #1,d2
  9952.  
  9953.     lea    mt_samplestarts(pc),a1
  9954.     asl.l    #8,d2
  9955.     asl.l    #2,d2
  9956.     add.l    #$43c,d2
  9957.     add.l    a0,d2
  9958.     move.l    d2,a2
  9959.     moveq    #$1e,d0
  9960. mt_lop3:clr.l    (a2)
  9961.     move.l    a2,(a1)+
  9962.     moveq    #0,d1
  9963.     move.w    42(a0),d1
  9964.     asl.l    #1,d1
  9965.     add.l    d1,a2
  9966.     add.l    #$1e,a0
  9967.     dbf    d0,mt_lop3
  9968.  
  9969.     or.b    #$2,$bfe001
  9970.     move.b    #$6,mt_speed
  9971.     clr.w    $dff0a8
  9972.     clr.w    $dff0b8
  9973.     clr.w    $dff0c8
  9974.     clr.w    $dff0d8
  9975.     clr.b    mt_songpos
  9976.     clr.b    mt_counter
  9977.     clr.w    mt_pattpos
  9978.     rts
  9979.  
  9980. mt_end:    clr.w    $dff0a8
  9981.     clr.w    $dff0b8
  9982.     clr.w    $dff0c8
  9983.     clr.w    $dff0d8
  9984.     move.w    #$f,$dff096
  9985.     rts
  9986.  
  9987. mt_music:
  9988.     movem.l    d0-d4/a0-a3/a5-a6,-(a7)
  9989.     move.l    mt_data,a0
  9990.     addq.b    #$1,mt_counter
  9991.     move.b    mt_counter,D0
  9992.     cmp.b    mt_speed,D0
  9993.     blt.s    mt_nonew
  9994.     clr.b    mt_counter
  9995.     bra    mt_getnew
  9996.  
  9997. mt_nonew:
  9998.     lea    mt_voice1(pc),a6
  9999.     lea    $dff0a0,a5
  10000.     bsr    mt_checkcom
  10001.     lea    mt_voice2(pc),a6
  10002.     lea    $dff0b0,a5
  10003.     bsr    mt_checkcom
  10004.     tst.b UseAllChannels
  10005.     beq mt_endr
  10006.      lea    mt_voice3(pc),a6
  10007.     lea    $dff0c0,a5
  10008.     bsr    mt_checkcom
  10009.     lea    mt_voice4(pc),a6
  10010.     lea    $dff0d0,a5
  10011.     bsr    mt_checkcom
  10012.     bra    mt_endr
  10013.  
  10014. mt_arpeggio:
  10015.     moveq    #0,d0
  10016.     move.b    mt_counter,d0
  10017.     divs    #$3,d0
  10018.     swap    d0
  10019.     cmp.w    #$0,d0
  10020.     beq.s    mt_arp2
  10021.     cmp.w    #$2,d0
  10022.     beq.s    mt_arp1
  10023.  
  10024.     moveq    #0,d0
  10025.     move.b    $3(a6),d0
  10026.     lsr.b    #4,d0
  10027.     bra.s    mt_arp3
  10028. mt_arp1:moveq    #0,d0
  10029.     move.b    $3(a6),d0
  10030.     and.b    #$f,d0
  10031.     bra.s    mt_arp3
  10032. mt_arp2:move.w    $10(a6),d2
  10033.     bra.s    mt_arp4
  10034. mt_arp3:asl.w    #1,d0
  10035.     moveq    #0,d1
  10036.     move.w    $10(a6),d1
  10037.     lea    mt_periods(pc),a0
  10038.     moveq    #$24,d7
  10039. mt_arploop:
  10040.     move.w    (a0,d0.w),d2
  10041.     cmp.w    (a0),d1
  10042.     bge.s    mt_arp4
  10043.     addq.l    #2,a0
  10044.     dbf    d7,mt_arploop
  10045.     rts
  10046. mt_arp4:move.w    d2,$6(a5)
  10047.     rts
  10048.  
  10049. mt_getnew:
  10050.     move.l    mt_data,a0
  10051.     move.l    a0,a3
  10052.     move.l    a0,a2
  10053.     add.l    #$c,a3
  10054.     add.l    #$3b8,a2
  10055.     add.l    #$43c,a0
  10056.  
  10057.     moveq    #0,d0
  10058.     move.l    d0,d1
  10059.     move.b    mt_songpos,d0
  10060.     move.b    (a2,d0.w),d1
  10061.     asl.l    #8,d1
  10062.     asl.l    #2,d1
  10063.     add.w    mt_pattpos,d1
  10064.     clr.w    mt_dmacon
  10065.  
  10066.     lea    $dff0a0,a5
  10067.     lea    mt_voice1(pc),a6
  10068.     bsr    mt_playvoice
  10069.     lea    $dff0b0,a5
  10070.     lea    mt_voice2(pc),a6
  10071.     bsr    mt_playvoice
  10072.     tst.b UseAllChannels
  10073.     beq mt_setdma
  10074.     lea    $dff0c0,a5
  10075.     lea    mt_voice3(pc),a6
  10076.     bsr    mt_playvoice
  10077.     lea    $dff0d0,a5
  10078.     lea    mt_voice4(pc),a6
  10079.     bsr    mt_playvoice
  10080.     bra    mt_setdma
  10081.  
  10082. PROTCALC:
  10083. ;    include "ab3:source_4000/protcalc.s"
  10084.     incbin "ab3:includes/protcalc.bin"
  10085. ENDPROTCALC:
  10086.  
  10087. mt_playvoice:
  10088.     move.l    (a0,d1.l),(a6)
  10089.     addq.l    #4,d1
  10090.     moveq    #0,d2
  10091.     move.b    $2(a6),d2
  10092.     and.b    #$f0,d2
  10093.     lsr.b    #4,d2
  10094.     move.b    (a6),d0
  10095.     and.b    #$f0,d0
  10096.     or.b    d0,d2
  10097.     tst.b    d2
  10098.     beq.s    mt_setregs
  10099.     moveq    #0,d3
  10100.     lea    mt_samplestarts(pc),a1
  10101.     move.l    d2,d4
  10102.     subq.l    #$1,d2
  10103.     asl.l    #2,d2
  10104.     mulu    #$1e,d4
  10105.     move.l    (a1,d2.l),$4(a6)
  10106.     move.w    (a3,d4.l),$8(a6)
  10107.     move.w    $2(a3,d4.l),$12(a6)
  10108.     move.w    $4(a3,d4.l),d3
  10109.     tst.w    d3
  10110.     beq.s    mt_noloop
  10111.     move.l    $4(a6),d2
  10112.     asl.w    #1,d3
  10113.     add.l    d3,d2
  10114.     move.l    d2,$a(a6)
  10115.     move.w    $4(a3,d4.l),d0
  10116.     add.w    $6(a3,d4.l),d0
  10117.     move.w    d0,8(a6)
  10118.     move.w    $6(a3,d4.l),$e(a6)
  10119.     move.w    $12(a6),d0
  10120.     asr.w #2,d0
  10121.     move.w d0,$8(a5)
  10122.     bra.s    mt_setregs
  10123. mt_noloop:
  10124.     move.l    $4(a6),d2
  10125.     add.l    d3,d2
  10126.     move.l    d2,$a(a6)
  10127.     move.w    $6(a3,d4.l),$e(a6)
  10128.     move.w    $12(a6),d0
  10129.     asr.w #2,d0
  10130.     move.w d0,$8(a5)
  10131. mt_setregs:
  10132.     move.w    (a6),d0
  10133.     and.w    #$fff,d0
  10134.     beq    mt_checkcom2
  10135.     move.b    $2(a6),d0
  10136.     and.b    #$F,d0
  10137.     cmp.b    #$3,d0
  10138.     bne.s    mt_setperiod
  10139.     bsr    mt_setmyport
  10140.     bra    mt_checkcom2
  10141. mt_setperiod:
  10142.     move.w    (a6),$10(a6)
  10143.     and.w    #$fff,$10(a6)
  10144.     move.w    $14(a6),d0
  10145.     move.w    d0,$dff096
  10146.     clr.b    $1b(a6)
  10147.  
  10148.     move.l    $4(a6),(a5)
  10149.     move.w    $8(a6),$4(a5)
  10150.     move.w    $10(a6),d0
  10151.     and.w    #$fff,d0
  10152.     move.w    d0,$6(a5)
  10153.     move.w    $14(a6),d0
  10154.     or.w    d0,mt_dmacon
  10155.     bra    mt_checkcom2
  10156.  
  10157. mt_setdma:
  10158.      move.w #250,d0
  10159. mt_wait:
  10160.      add.w #1,testchip
  10161.      dbra d0,mt_wait
  10162.     move.w    mt_dmacon,d0
  10163.     or.w    #$8000,d0
  10164.     and.w #%1111111111110011,d0
  10165.     move.w    d0,$dff096
  10166.     move.w #250,d0
  10167. mt_wait2:
  10168.     add.w #1,testchip
  10169.     dbra    d0,mt_wait2
  10170.     lea    $dff000,a5
  10171.     tst.b UseAllChannels
  10172.     beq.s noall
  10173.     lea    mt_voice4(pc),a6
  10174.     move.l    $a(a6),$d0(a5)
  10175.     move.w    $e(a6),$d4(a5)
  10176.     lea    mt_voice3(pc),a6
  10177.     move.l    $a(a6),$c0(a5)
  10178.     move.w    $e(a6),$c4(a5)
  10179. noall:
  10180.     lea    mt_voice2(pc),a6
  10181.     move.l    $a(a6),$b0(a5)
  10182.     move.w    $e(a6),$b4(a5)
  10183.     lea    mt_voice1(pc),a6
  10184.     move.l    $a(a6),$a0(a5)
  10185.     move.w    $e(a6),$a4(a5)
  10186.  
  10187.     add.w    #$10,mt_pattpos
  10188.     cmp.w    #$400,mt_pattpos
  10189.     bne.s    mt_endr
  10190. mt_nex:    clr.w    mt_pattpos
  10191.     clr.b    mt_break
  10192.     addq.b    #1,mt_songpos
  10193.     and.b    #$7f,mt_songpos
  10194.     move.b    mt_songpos,d1
  10195. ;    cmp.b    mt_data+$3b6,d1
  10196. ;    bne.s    mt_endr
  10197. ;    move.b    mt_data+$3b7,mt_songpos
  10198. mt_endr:tst.b    mt_break
  10199.     bne.s    mt_nex
  10200.     movem.l    (a7)+,d0-d4/a0-a3/a5-a6
  10201.     rts
  10202.  
  10203. mt_setmyport:
  10204.     move.w    (a6),d2
  10205.     and.w    #$fff,d2
  10206.     move.w    d2,$18(a6)
  10207.     move.w    $10(a6),d0
  10208.     clr.b    $16(a6)
  10209.     cmp.w    d0,d2
  10210.     beq.s    mt_clrport
  10211.     bge.s    mt_rt
  10212.     move.b    #$1,$16(a6)
  10213.     rts
  10214. mt_clrport:
  10215.     clr.w    $18(a6)
  10216. mt_rt:    rts
  10217.  
  10218. CODESTORE: dc.l 0
  10219.  
  10220. mt_myport:
  10221.     move.b    $3(a6),d0
  10222.     beq.s    mt_myslide
  10223.     move.b    d0,$17(a6)
  10224.     clr.b    $3(a6)
  10225. mt_myslide:
  10226.     tst.w    $18(a6)
  10227.     beq.s    mt_rt
  10228.     moveq    #0,d0
  10229.     move.b    $17(a6),d0
  10230.     tst.b    $16(a6)
  10231.     bne.s    mt_mysub
  10232.     add.w    d0,$10(a6)
  10233.     move.w    $18(a6),d0
  10234.     cmp.w    $10(a6),d0
  10235.     bgt.s    mt_myok
  10236.     move.w    $18(a6),$10(a6)
  10237.     clr.w    $18(a6)
  10238. mt_myok:move.w    $10(a6),$6(a5)
  10239.     rts
  10240. mt_mysub:
  10241.     sub.w    d0,$10(a6)
  10242.     move.w    $18(a6),d0
  10243.     cmp.w    $10(a6),d0
  10244.     blt.s    mt_myok
  10245.     move.w    $18(a6),$10(a6)
  10246.     clr.w    $18(a6)
  10247.     move.w    $10(a6),$6(a5)
  10248.     rts
  10249.  
  10250. mt_vib:    move.b    $3(a6),d0
  10251.     beq.s    mt_vi
  10252.     move.b    d0,$1a(a6)
  10253.  
  10254. mt_vi:    move.b    $1b(a6),d0
  10255.     lea    mt_sin(pc),a4
  10256.     lsr.w    #$2,d0
  10257.     and.w    #$1f,d0
  10258.     moveq    #0,d2
  10259.     move.b    (a4,d0.w),d2
  10260.     move.b    $1a(a6),d0
  10261.     and.w    #$f,d0
  10262.     mulu    d0,d2
  10263.     lsr.w    #$6,d2
  10264.     move.w    $10(a6),d0
  10265.     tst.b    $1b(a6)
  10266.     bmi.s    mt_vibmin
  10267.     add.w    d2,d0
  10268.     bra.s    mt_vib2
  10269. mt_vibmin:
  10270.     sub.w    d2,d0
  10271. mt_vib2:move.w    d0,$6(a5)
  10272.     move.b    $1a(a6),d0
  10273.     lsr.w    #$2,d0
  10274.     and.w    #$3c,d0
  10275.     add.b    d0,$1b(a6)
  10276.     rts
  10277.  
  10278. mt_nop:    move.w    $10(a6),$6(a5)
  10279.     rts
  10280.  
  10281.  
  10282. mt_checkcom:
  10283.     move.w    $2(a6),d0
  10284.     and.w    #$fff,d0
  10285.     beq.s    mt_nop
  10286.     move.b    $2(a6),d0
  10287.     and.b    #$f,d0
  10288.     tst.b    d0
  10289.     beq    mt_arpeggio
  10290.     cmp.b    #$1,d0
  10291.     beq.s    mt_portup
  10292.     cmp.b    #$2,d0
  10293.     beq    mt_portdown
  10294.     cmp.b    #$3,d0
  10295.     beq    mt_myport
  10296.     cmp.b    #$4,d0
  10297.     beq    mt_vib
  10298.     move.w    $10(a6),$6(a5)
  10299.     cmp.b    #$a,d0
  10300.     beq.s    mt_volslide
  10301.     rts
  10302.  
  10303. mt_volslide:
  10304.     moveq    #0,d0
  10305.     move.b    $3(a6),d0
  10306.     lsr.b    #4,d0
  10307.     tst.b    d0
  10308.     beq.s    mt_voldown
  10309.     add.w    d0,$12(a6)
  10310.     cmp.w    #$40,$12(a6)
  10311.     bmi.s    mt_vol2
  10312.     move.w    #$40,$12(a6)
  10313. mt_vol2:move.w    $12(a6),d0
  10314.     asr.w #2,d0
  10315.     move.w d0,$8(a5)
  10316.     rts
  10317.  
  10318. mt_voldown:
  10319.     moveq    #0,d0
  10320.     move.b    $3(a6),d0
  10321.     and.b    #$f,d0
  10322.     sub.w    d0,$12(a6)
  10323.     bpl.s    mt_vol3
  10324.     clr.w    $12(a6)
  10325. mt_vol3:move.w    $12(a6),d0
  10326.     asr.w #2,d0
  10327.     move.w d0,$8(a5)
  10328.     rts
  10329.  
  10330. mt_portup:
  10331.     moveq    #0,d0
  10332.     move.b    $3(a6),d0
  10333.     sub.w    d0,$10(a6)
  10334.     move.w    $10(a6),d0
  10335.     and.w    #$fff,d0
  10336.     cmp.w    #$71,d0
  10337.     bpl.s    mt_por2
  10338.     and.w    #$f000,$10(a6)
  10339.     or.w    #$71,$10(a6)
  10340. mt_por2:move.w    $10(a6),d0
  10341.     and.w    #$fff,d0
  10342.     move.w    d0,$6(a5)
  10343.     rts
  10344.  
  10345. mt_portdown:
  10346.     clr.w    d0
  10347.     move.b    $3(a6),d0
  10348.     add.w    d0,$10(a6)
  10349.     move.w    $10(a6),d0
  10350.     and.w    #$fff,d0
  10351.     cmp.w    #$358,d0
  10352.     bmi.s    mt_por3
  10353.     and.w    #$f000,$10(a6)
  10354.     or.w    #$358,$10(a6)
  10355. mt_por3:move.w    $10(a6),d0
  10356.     and.w    #$fff,d0
  10357.     move.w    d0,$6(a5)
  10358.     rts
  10359.  
  10360. mt_checkcom2:
  10361.     move.b    $2(a6),d0
  10362.     and.b    #$f,d0
  10363.     cmp.b    #$e,d0
  10364.     beq.s    mt_setfilt
  10365.     cmp.b    #$d,d0
  10366.     beq.s    mt_pattbreak
  10367.     cmp.b    #$b,d0
  10368.     beq.s    mt_posjmp
  10369.     cmp.b    #$c,d0
  10370.     beq.s    mt_setvol
  10371.     cmp.b    #$f,d0
  10372.     beq.s    mt_setspeed
  10373.     rts
  10374.  
  10375. mt_setfilt:
  10376.     move.b    $3(a6),d0
  10377.     and.b    #$1,d0
  10378.     asl.b    #$1,d0
  10379.     and.b    #$fd,$bfe001
  10380.     or.b    d0,$bfe001
  10381.     rts
  10382. mt_pattbreak:
  10383.     not.b    mt_break
  10384.     rts
  10385. mt_posjmp:
  10386.     st reachedend
  10387.     move.b    $3(a6),d0
  10388.     subq.b    #$1,d0
  10389.     move.b    d0,mt_songpos
  10390.     not.b    mt_break
  10391.     rts
  10392. mt_setvol:
  10393.     cmp.b    #$40,$3(a6)
  10394.     ble.s    mt_vol4
  10395.     move.b    #$40,$3(a6)
  10396. mt_vol4:move.b    $3(a6),d0
  10397.     asr.w #2,d0
  10398.     move.w d0,$8(a5)
  10399.     rts
  10400. mt_setspeed:
  10401.     cmp.b    #$1f,$3(a6)
  10402.     ble.s    mt_sets
  10403.     move.b    #$1f,$3(a6)
  10404. mt_sets:move.b    $3(a6),d0
  10405.     beq.s    mt_rts2
  10406.     move.b    d0,mt_speed
  10407.     clr.b    mt_counter
  10408. mt_rts2:rts
  10409.  
  10410. mt_sin:
  10411.  DC.b $00,$18,$31,$4a,$61,$78,$8d,$a1,$b4,$c5,$d4,$e0,$eb,$f4,$fa,$fd
  10412.  DC.b $ff,$fd,$fa,$f4,$eb,$e0,$d4,$c5,$b4,$a1,$8d,$78,$61,$4a,$31,$18
  10413.  
  10414. mt_periods:
  10415.  DC.w $0358,$0328,$02fa,$02d0,$02a6,$0280,$025c,$023a,$021a,$01fc,$01e0
  10416.  DC.w $01c5,$01ac,$0194,$017d,$0168,$0153,$0140,$012e,$011d,$010d,$00fe
  10417.  DC.w $00f0,$00e2,$00d6,$00ca,$00be,$00b4,$00aa,$00a0,$0097,$008f,$0087
  10418.  DC.w $007f,$0078,$0071,$0000,$0000
  10419.  
  10420. reachedend: dc.b 0
  10421. mt_speed:    DC.b    6
  10422. mt_songpos:    DC.b    0
  10423. mt_pattpos:    DC.w    0
  10424. mt_counter:    DC.b    0
  10425.  
  10426. mt_break:    DC.b    0
  10427. mt_dmacon:    DC.w    0
  10428. mt_samplestarts:DS.L    $1f
  10429. mt_voice1:    DS.w    10
  10430.         DC.w    1
  10431.         DS.w    3
  10432. mt_voice2:    DS.w    10
  10433.         DC.w    2
  10434.         DS.w    3
  10435. mt_voice3:    DS.w    10
  10436.         DC.w    4
  10437.         DS.w    3
  10438. mt_voice4:    DS.w    10
  10439.         DC.w    8
  10440.         DS.w    3
  10441.  
  10442. CHEATPTR: dc.l 0
  10443. CHEATNUM: dc.l 0
  10444.  
  10445. testchip: dc.w 0
  10446.  
  10447. ;/* End of File */
  10448. mt_data: dc.l 0
  10449. tstchip: dc.l 0
  10450.  include "SERIAL_NIGHTMARE"
  10451.  
  10452. ingame:
  10453. ; incbin "ab3:includes/ingame"
  10454. gameover: incbin "ab3:includes/gameover"
  10455. welldone: incbin "ab3:includes/welldone"
  10456.  
  10457.  
  10458.